簡體   English   中英

如何在yii2中加載動態加載內容中的小部件?

[英]How to load widgets in dynamically loaded content in yii2 ?

我每次在點擊事件上加載整個模態內容。 由於我在模態上顯示的內容取決於id,因此它是完全動態的。 我在動態內容中使用了幾個小部件。 像kartik select2和其他幾個。 但它沒有加載小部件資產。 然后我嘗試手動加載資產但仍然錯過了一些通常會加載的js文件。 事件ajax表單提交也無法正常工作。 以下是我的觀點代碼。

<?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();

可能有幾個原因。

最明顯的一個(這是你的情況)是如果你使用renderPartial()而不是renderAjax()會發生這種情況。 他們都做同樣的事情,但有一點不同:

renderPartial()不加載資源(css,js)。 但是renderAjax()會加載資源。 它是為部分通過ajax加載頁面的用例而設計的。

第二點可能發生的是資產通過Pjax加載一些較舊版本的bower\\yii2-pjax (<= 2.0.5)。 你可以在這里找到答案。 對於2.0.6+,您不應該遇到問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM