2015-01-22 3 views
2

Как включить файлы .js после кода javascript, сгенерированного виджлетом Datepicker в файле вида.Yii2 включает активы после кода, генерируемого виджетами

  echo DatePicker::widget([ 
       'name' => 'datepicker--2', 
       'id' => 'datepicker--2', 
       'clientOptions' => [ 
        'showOtherMonths' => true, 
        'maxDate' => '+ 0d', 
        'showOtherMonths' => true, 
        'selectOtherMonths' => true, 
       ] 
      ]); 

Мой пакет активов:

namespace app\assets; 

use yii\web\AssetBundle; 

class ChartsAsset extends AssetBundle 
{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $js = [ 
     'js/charts.js', 
     'js/charts-init.js', 
    ]; 
    public $depends = [ 
     'yii\web\YiiAsset', 
     'yii\jui\JuiAsset', 
     'yii\web\JqueryAsset', 
    ]; 
} 

Что я получаю на моей странице источника:

... 
<script src="/new/js/charts.js"></script> 
<script src="/new/js/charts-init.js"></script> 
<script type="text/javascript">jQuery(document).ready(function() { 
$('#datepicker--2').datepicker($.extend({}, {"showOtherMonths":true,"maxDate":"+ 0d","selectOtherMonths":true,"dateFormat":"M d, yy"})); 
});</script></body> 
</html> 
+2

Есть ли причина, по которой вы хотите, чтобы ваши скрипты загружались после кода 'jQuery (document) .ready(), сгенерированного' DatePicker'? Код там только запускается после того, как DOM загрузился в любом случае, включая теги скриптов, которые загружают ваши js-файлы. – deacs

+0

^Что он спросил, какую проблему вы пытаетесь решить, сделав это? –

+0

@deacs charts-init.js содержит jQuery (document) .ready() тоже и должен иметь доступ к инициализированному datepicker. – user1561346

ответ

3

С yii2, у вас есть варианты, чтобы определить position (ГОЛОВУ, ИЛИ НАЧАТЬ END) клиентских скриптов в документе. Это может быть достигнуто, делая что-то вроде этого

public $jsOptions = [ 
     'position' => \yii\web\View::POS_HEAD 
]; 

Или Использование This.

+0

Что мне делать в моем случае? Как я могу поместить скрипты виджета между моими скриптами? – user1561346

1

Создать BaseAssets как это:

namespace app\assets; 

class BaseAsset extends AssetBundle 
{ 
    public $sourcePath = '@resources'; // @app/resources 
    public $css = []; 
    public $js = [];  
    public $depends = [ 
     'yii\web\YiiAsset', 
     'yii\jui\JuiAsset', 
     'yii\web\JqueryAsset', 
    ];   
    public $jsOptions = [ 'position' => \yii\web\View::POS_HEAD ]; 
} 

И ваш Assets:

namespace app\assets; 

use yii\web\AssetBundle; 

class ChartsAsset extends AssetBundle 
{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $js = [ 
     'js/charts.js', 
     'js/charts-init.js', 
    ]; 
    public $depends = [ 
     'app\assets\BaseAssets',   
    ]; 
    public $jsOptions = [ 'position' => \yii\web\View::POS_END ]; 
}