Yii2 使用 Select2 和 yii2-formwizard 的表格步骤

我正在使用yii2-formwizard,它是我的项目中的一个方便的工具kartik\select2。一切正常,除非当我按添加以获取select2前一组的下一组下拉菜单消失时。


当我修改我的控制器以从我的模型中捕获数据时会发生这种情况,如我上一篇文章所述,我在脚本方面遗漏了一些东西我在 jquery/JS 等方面有点差,无论如何,除了数据被保存并且小部件工作完美之外


我的控制器

<?php


public function actionCreatemulti()

{

    $this->layout = 'layout2';

    $model = [new Todelete()];

    $sex = [['id' => 1, 'name' => 'male'], ['id' => 2, 'name' => 'female']];


    if (Yii::$app->request->isPost) {


        $count = count(Yii::$app->request->post('Todelete', []));

        //start the loop from 1 rather than 0 and use the $count for limit

        for ($i = 1; $i < $count; $i++) {

            $model[] = new Todelete();

        }


        if (Model::loadMultiple($model, Yii::$app->request->post()) && Model::validateMultiple($model)) {

            foreach ($model as $md) {

                $md->save(false);

            }

            return $this->render('index');

        }

    }


    return $this->render('create', [

        'model' => $model,

        'sex' => $sex

    ]);

}


慕神8447489
浏览 199回答 2
2回答

SMILET

原因你指出的问题确实存在,你说得对。但是这个问题与最近对kartik\select2 @V2.1.4.The demo links 的更改有关。 演示链接使用的是旧版本的 select2&nbsp;V2.1.3,它没有dataset定义这个属性,因此可以正常工作。小部件不会集成所有这些更改,而是留给正在集成小部件的用户原因是不可能在插件中正确控制它,因为可能有用户想要使用的任何小部件,并且继续为每个其他小部件添加代码不是我会投票的。因此,更好的方法是为需要对元素进行预处理或后处理的特定操作提供事件触发器,用户可以根据需要调整其代码故障排除现在关于这个问题,有一个新的数据集属性data-select2-id,它保存 select2 绑定到的输入的名称,并且在克隆新元素后,该属性不会更新为导致旧的 select 元素消失的较新元素 id。请参阅下面的图片,它来自我自己的代码,因此请忽略address-0-city字段名称,因为它与您的代码无关,仅供理解解决方案所以我们需要把afterInsert事件中的代码改成下面的let selectElement = $(this).find('.field-todelete-'+params.rowIndex+'-sex > select');let dataKrajee = eval(selectElement.data('krajee-select2'));//update the dataset attribute to theif (typeof selectElement[0].dataset.select2Id !== 'undefined') {&nbsp; &nbsp; //get the old dataset which has the old id of the input the select2 is bind to&nbsp;&nbsp; &nbsp; let oldDataSelect2Id = selectElement[0].dataset.select2Id;&nbsp; &nbsp; //delete the old dataset&nbsp; &nbsp; delete selectElement[0].dataset.select2Id;&nbsp; &nbsp; //add the new dataselect pointing to the new id of the cloned element&nbsp; &nbsp; let newDataSelect2Id = oldDataSelect2Id.replace(&nbsp; &nbsp; /\-([\d]+)\-/,&nbsp; &nbsp; '-' + parseInt(params.rowIndex) + '-'&nbsp; &nbsp; );&nbsp; &nbsp; //add the new dataset with the new cloned input id&nbsp;&nbsp; &nbsp; selectElement[0].dataset.select2Id= newDataSelect2Id;}selectElement.select2(dataKrajee);我将在接下来的几天内更新 wiki 文档和代码示例以及演示中的代码。希望能帮到你。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript