laravel-admin解决表单select联动时,编辑默认没选上

laravel-admin解决表单select联动时,编辑默认没选上

       今天在开发公司一个功能时,公司开发环境用的是laravel-admin,因为需要用上select联动,所以根据文档说明进行开发,并成功的使用上了,代码我就不重复,大家可以去参考laravel-admin官网的说明。

       首先我们找到select的js,路径:跟目录/vendor/encore/laravel-admin/src/Form/Field下的Select.php文件,找到下面代码:

 $script = <<<EOT
$(document).on('change', "{$this->getElementClassSelector()}", function () {
    var target = $(this).closest('.fields-group').find(".$class");
    $.get("$sourceUrl?q="+this.value, function (data) {
        target.find("option").remove();
        $(target).select2({
            data: $.map(data, function (d) {
                d.id = d.$idField;
                d.text = d.$textField;
                return d;
            })
        }).trigger('change');
    });
});

EOT;

       并修改成以下代码:

$script = <<<EOT
$(document).on('change', "{$this->getElementClassSelector()}", function () {
    var target = $(this).closest('.fields-group').find(".$class");
    $.get("$sourceUrl?q="+this.value, function (data) {
        target.find("option").remove();
        $(target).select2({
            data: $.map(data, function (d) {
                d.id = d.$idField;
                d.text = d.$textField;
                return d;
            })
        }).trigger('change');
    });
});

$('{$this->getElementClassSelector()}').trigger('change');

EOT;

      我们在原有代码中加入这句:

$('{$this->getElementClassSelector()}').trigger('change');

作用就是在初始化的时候触发一次联动。

      然后在我们的表单中,我们再来定义编辑初始时候的值,代码如下:

$form->select('hezuo', "合作模式")->options(function () {
    $record = request()->route()->parameters();
    $record = $record["chanpin"];
    $data = ChanpinModel::where('id', $record)->first();
    $hezuoList = array(
        "1" => '测试1',
        "2" => '测试2',
        "3" => '测试3',
     );
    $hezuo = $data->hezuo;
    return [$hezuo => $hezuoList[$hezuo]];
});

       这段代码是根据当前记录的值,去获取对应所属那个选项,这样便使select联动编辑时,能够默认选上我们的值。


0条评论

发表评论