2016-09-28 2 views
1

Я загружаю весь модальный контент каждый раз на какое-то событие click. Поскольку мой контент, отображаемый в модальном режиме, зависит от идентификатора, поэтому он полностью динамичен. Я использую несколько виджета в динамическом контенте. например, kartik select2 и несколько других. Но это не загрузка активов виджета. Затем я попытался вручную загрузить активы, но все-таки пропустил некоторый файл js, который обычно загружался. Событие ajax form также не работает. Ниже приведен код моего представления.Как загрузить виджеты в динамически загружаемом контенте в yii2?

<?php 

use yii\widgets\ActiveForm; 
use yii\bootstrap\Modal; 
use yii\helpers\ArrayHelper; 
use admin\models\Applicant; 
use yii\helpers\Html; 
use kartik\widgets\Select2; 
use yii\helpers\Url; 

Modal::begin([ 

    'header' => '<h1>Assign Applicant</h1>', 
    'options' => [ 
     'id' => 'assignApplicantModal', 
     'tabindex' => false 
    ], 
]); 
?> 

<div class="job-positions-form"> 

    <?php 
    $form = ActiveForm::begin([ 
       'id' => 'assign_applicant_frm', 
       'action' => Url::to(['scheduler/assign_applicant/' . $id]), 
       'enableClientValidation' => true, 
       'enableAjaxValidation' => true, 
       'validationUrl' => Url::toRoute(['scheduler/validation-assign-applicant']), 
       'validateOnSubmit' => true,]); 
    ?> 
    <div class="row"> 
     <div class="col-sm-12"> 
      <?php 
      $data = ArrayHelper::map(Applicant::find()->where('status = :status', [':status' => 'Active'])->all(), 'id', function($model) { 
         return $model->first_name . ' ' . $model->last_name; 
        }); 

      echo $form->field($assign_model, 'applicant_id')->widget(Select2::classname(), [ 
       'data' => $data, 
       'attribute' => 'applicant_id', 
       'options' => ['placeholder' => 'Select an applicant', 'multiple' => 'multiple', 'style' => "width:100%"], 
       'pluginEvents' => [ 
        "select2:selecting" => "function() { " 
        . "no_position = $('body').data('no_position');" 
        . "if(no_position>= " . $model->no_of_persons . "){alert('You can select only " . $model->no_of_persons . " applicant(s)');return false;} }", 
        "select2:select" => "function() { " 
        . "no_position = $('body').data('no_position');" 
        . "$('body').data('no_position',++no_position);}", 
        "select2:unselect" => "function() { " 
        . "no_position = $('body').data('no_position');" 
        . "$('body').data('no_position',--no_position);}", 
       ] 
      ]); 
      ?> 
     </div> 
     <div class="col-sm-12"> 
      <?php echo $form->field($assign_model, 'applicant_pay')->textInput(['maxlength' => true]); ?> 
     </div> 

     <div class="form-group" style="text-align: center;"> 
      <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary', 'id' => 'assign_save_btn']) ?> 
     </div> 
    </div> 
    <?php ActiveForm::end(); ?> 
</div> 
<?php 
$inlineScript = "$('body').data('no_position'," . count($applicant_id) . ")"; 
$this->registerJs($inlineScript, \yii\web\View::POS_END, 'my-inline-js'); 
Modal::end(); 
+0

Здесь может быть несколько вещей. Как вы визуализируете html в модальном? Вы используете 'renderAjax()' в действии вашего контроллера? Это поможет загрузить надлежащие активы в ваш модальный. Также вы используете Pjax? Если да, то какая версия yiisoft/Pjax вы используете? В последней версии произошли некоторые существенные изменения. –

+0

@ D.Mill Я использую renderPartial. Я не использую Pjax – Ish

+3

, попробовав использовать «renderAjax», а вместо этого, поскольку «renderPartial» не загружает активы таким же образом. –

ответ

3

Для этого может быть несколько причин.

Наиболее очевидным (это ваш случай) является то, что это происходит, если вы используете renderPartial() вместо renderAjax(). Они оба делают одно и то же с одной разницей:

renderPartial() не загружает активы (css, js). Однако renderAjax() действительно загружает активы. Он был разработан для случаев использования, когда страницы загружались частично через ajax.

Второй момент, который может произойти, - это когда активы загружаются через Pjax с более старыми версиями bower\yii2-pjax (< = 2.0.5). Вы можете найти ответ на этот here. Для 2.0.6+ вы не должны испытывать проблем.

Смежные вопросы