动态形式wbraganca的yii2插件只在第一个元素工作

动态形式wbraganca的yii2插件只在第一个元素工作,yii2,Yii2,我正在wbraganca动态表单中使用一些插件(yii\widgets\MaskedInput和kartik\select2\select2)。 我注意到这两个插件只在第一个元素工作。 请给我一些建议。谢谢你。 我的代码是这样的 <?= $form->field($detail, "[{$i}]item_id")->widget(Select2::classname(), [ 'data' => ArrayHelper::map(Item::find()->

我正在wbraganca动态表单中使用一些插件(yii\widgets\MaskedInput和kartik\select2\select2)。 我注意到这两个插件只在第一个元素工作。 请给我一些建议。谢谢你。 我的代码是这样的

<?= $form->field($detail, "[{$i}]item_id")->widget(Select2::classname(), [
    'data' => ArrayHelper::map(Item::find()->all(), 'id', 'name'),  
    'language' => 'en',
    'options' => ['placeholder' => 'Select Items ...', 'onchange' => 'getItemPrice($(this))'],
    'pluginOptions' => [
        'allowClear' => true
    ],
]) ?>

<?= $form->field($detail, "[{$i}]qty")->widget(\yii\widgets\MaskedInput::className(),
[
    'clientOptions' => [
    'alias' => 'numeric',
    'groupSeparator' => ',',
    'digits' => 0,
    'autoGroup' => true,
    'removeMaskOnSubmit' => true,
    'rightAlign' => false,                                  
    ],
    'options' => [
       'class' => 'form-control',
       'onchange' => 'calculateSubtotal($(this))',                                  
    ]                               
]) ?>

当您添加新元素(表单)时,我希望您重新初始化小部件。请参阅下面的链接,这与您的情况相同,但与您的情况不完全相同


当您添加新元素(表单)时,我希望您重新初始化小部件。请参阅下面的链接,这与您的情况相同,但并不完全符合您的需要


编写者需要pceuropa/yii2表单开发母版

编写者需要pceuropa/yii2表单开发母版

最后我找到了这个问题的答案。它实际上在github.com/wbraganca中得到了回答。 以下是我的工作: 1.对于kartik/select2,修改源代码yii2-dynamic-form.js(记住删除web/assets文件以使其生效)

  • 对于yii/widgets/MaskedInput,还要更改yii2-dynamic-form.js(添加一些代码):
    var\u restoreSpecialJs=函数(widgetOptions){
    var widgetoptionroot=\u getwidgetoptionroot(widgetOptions);
    //“jquery.inputmask”
    var$hasInputmask=$(widgetOptionsRoot.widgetItem).find(“[data plugin inputmask]”);
    如果($hasInputmask.length>0){
    $hasInputmask.each(函数(){
    $(this.inputmask('remove');
    $(this.inputmask)(eval($(this.attr('data-plugin-inputmask'));
    });
    }
  • 然后将MaskedInput.php复制到您的文件夹项目(mine:models\MaskedInput.php)并更改此代码

    $view->registerJs("var {$this->_hashVar} = {$encOptions};", View::POS_READY);
    

    请记住使用已编辑文件中的MaskedInput。
    谢谢。

    我终于找到了这个问题的答案。它实际上在github.com/wbraganca中得到了回答。 以下是我的工作: 1.对于kartik/select2,修改源代码yii2-dynamic-form.js(记住删除web/assets文件以使其生效)

  • 对于yii/widgets/MaskedInput,还要更改yii2-dynamic-form.js(添加一些代码):
    var\u restoreSpecialJs=函数(widgetOptions){
    var widgetoptionroot=\u getwidgetoptionroot(widgetOptions);
    //“jquery.inputmask”
    var$hasInputmask=$(widgetOptionsRoot.widgetItem).find(“[data plugin inputmask]”);
    如果($hasInputmask.length>0){
    $hasInputmask.each(函数(){
    $(this.inputmask('remove');
    $(this.inputmask)(eval($(this.attr('data-plugin-inputmask'));
    });
    }
  • 然后将MaskedInput.php复制到您的文件夹项目(mine:models\MaskedInput.php)并更改此代码

    $view->registerJs("var {$this->_hashVar} = {$encOptions};", View::POS_READY);
    

    请记住使用已编辑文件中的MaskedInput。
    谢谢。

    在阅读了wbraganca github中的一些问题后,我决定使用该回购协议中的这个叉子

    https://github.com/vivekmarakana/yii2-dynamicform
    

    但在某些情况下,我在
    widgetOptions
    数组中的fork仍然存在问题。请手动修复它们,方法是删除错误行中的索引(
    [i]
    )。

    在阅读了wbraganca github中的一些问题后,我决定从该repo中使用此fork

    https://github.com/vivekmarakana/yii2-dynamicform
    

    但在某些情况下,在
    widgetOptions
    数组中,这个fork对我来说仍然有问题。请手动修复它们,方法是删除该索引(
    [i]
    )错误行。

    我认为你的问题与此重复,这是不同的。它只问如何迭代。但我的问题是在添加另一行后,插件不再工作。我认为你的问题与此重复,这是不同的。它只问如何迭代。但我的问题是在添加另一行后,插件不再工作。仍然不理解如何添加元素。当单击“添加新行”时,在控制台中我收到错误:未捕获引用错误:未定义initSelect2Loading可能我应该更改主题如何以动态形式重新添加Select2 kartik?仍然不理解如何添加元素。当单击“添加新行”时,在控制台中我收到错误:未捕获引用错误或者:未定义初始化Select2Loading可能我应该更改主题如何以动态形式重新初始化Select2Kartik?