【FastAdmin开发记录】键值组件(FieldList)问题

问题:
有个页面用到了一维数组的键值组件,默认的键值组件有自带删除、拖动的功能,不希望客户进行删除和拖动,所以就需要自定义模板
然后就遇到了一个奇怪的问题:提交后对应textarea的值为空,在js里面获取,也变成了空数组。就算把require-form.js里面的fieldlisttpl直接拷贝过来用也是不行。

在这里插入图片描述

require-form.js里面代码

config: {
    fieldlisttpl: '<dd class="form-inline"><input type="text" name="<%=name%>[<%=index%>][key]" class="form-control" value="<%=key%>" placeholder="<%=options.keyPlaceholder||\'\'%>" size="10" /> <input type="text" name="<%=name%>[<%=index%>][value]" class="form-control" value="<%=value%>" placeholder="<%=options.valuePlaceholder||\'\'%>" /> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span></dd>'
}

经过一步步排查才发现,原来是在require-form.js的324行处有一个判断,如果定义了自定义模板,就默认当成是二维数组,导致赋值的时候变成了空数组

var refresh = function (container) {
    var data = {};
    var name = container.data("name");
    var textarea = $("textarea[name='" + name + "']", form);
    var template = container.data("template");
    $.each($("input,select,textarea", container).serializeArray(), function (i, j) {
        var reg = /\[(\w+)\]\[(\w+)\]$/g;
        var match = reg.exec(j.name);
        if (!match)
            return true;
        match[1] = "x" + parseInt(match[1]);
        if (typeof data[match[1]] == 'undefined') {
            data[match[1]] = {};
        }
        data[match[1]][match[2]] = j.value;
    });
    var result = template ? [] : {};// 就是这一行判断
    $.each(data, function (i, j) {
        if (j) {
            var keys = Object.keys(j);
            if (keys.indexOf("value") > -1 && (keys.length === 1 || (keys.length === 2 && keys.indexOf("key") > -1))) {
                if (keys.length === 2) {
                    if (j.key != '') {
                        result['__PLACEHOLDKEY__' + j.key] = j.value;
                    }
                } else {
                    result.push(j.value);
                }
            } else {
                result.push(j);
            }
        }
    });
    textarea.val(JSON.stringify(result).replace(/__PLACEHOLDKEY__/g, ''));
};

不想为了这个小功能去改动require-form.js,就用了个简单的方法绕过去了
直接在js里面把2个按钮给隐藏了

$(document).on("fa.event.refreshfieldlist", '.fieldlist', function(e, obj){
    $(".fieldlist .btn-remove, .fieldlist .btn-dragsort").hide();
});
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值