bootstrap-table 中columns中editable type为select默认使用本列数据

当时用bootstrap-table中的columns中editable中的type为select编辑模式下,我们需要必须制定source,然而source方法又没有一应该列数据的function,通过追踪源码以及修改相应的源码,对该方法进行了实现。

目的

目前有如下的json需要绑定到bootstrap的table中

{ "id": k, "table1": 数据库2, "table1Relation": ["banana", "peach"], "table2": 数据库3, "table2Relation": ["d", "e", "f"] }

说明:其中table1代表的是第一个数据库,table1Relation代表数据库1下面的字段,table2代表的是第二个数据库,table2Relation代表数据库2下面的字段。

现在想将该批数据绑定到bootstrap的table中,其中table1Relation和table1Relation可以作为下拉菜单显示或者可以编辑,如下图所示:
这里写图片描述

遇到的问题

使用formatter

最初想要通过columns下的formatter绑定function(value,row,index)来创建下拉列表进行处理,代码如下:

var formatFunc = function(value,row,index){
    var result = "<select  data-tags=\"true\" data-placeholder=\"Select an option\" class=\"selectpicker show-tick form-control\" data-live-search=\"false\">"
    for(var i=0;i<value.length;i++){
        result += " <option value=\""+value[i]+"\">"+value[i]+"</option>";
    }
    result += "</select>";
    return result
}
$("#tableRelation").bootstrapTable({
    data: resultList,
     uniqueId: "id",
     columns: [[
         {
             title: "表1",
             field: "table1"
         }, {
             title: "关联字段",
             field: "table1Relation",
             formatter: formatFunc
         }, {
             title: "表2",
             field: "table2"
         }, {
             title: "对应字段",
             field: "table2Relation",
             formatter: formatFunc
         }, {
             title: "操作",
             formatter: function (value, row, index) {
                 return "<a href='javascript:;' class='btn btn-default' onclick=\"$('#tableRelation').bootstrapTable('removeByUniqueId', " + row.id + ")\">不进行关联</a>"
             }
         }
     ]]
 });

这里写图片描述

但是当提交的时候,我们发现,bootstrap会将该下拉列表中所有的数据都会传入后台,而无法仅仅将选中数据传递过去。

使用editable

当使用editable的时候,其代码改为如下:

$("#tableRelation").bootstrapTable({
    data: resultList,
    uniqueId: "id",
    columns: [[
        {
            title: "表1",
            field: "table1"
        }, {
            title: "关联字段",
            field: "table1Relation",
            editable: {
                type:"select"
            }
        }, {
            title: "表2",
            field: "table2"
        }, {
            title: "对应字段",
            field: "table2Relation",
            editable: {
                type: "select"
            }
        }, {
            title: "操作",
            formatter: function (value, row, index) {
                return "<a href='javascript:;' class='btn btn-default' onclick=\"$('#tableRelation').bootstrapTable('removeByUniqueId', " + row.id + ")\">不进行关联</a>"
            }
        }
    ]]
});

效果如下:
这里写图片描述

我们发现其不会将table1Relation和table2Relation下对应的数据绑定到下拉列表中去,通过对源码的追踪,知道了该editable必须需要制定source字段,而默认source是不传递对应列下的数据的。
故对源码进行追踪并修改如下:
在js插件bootstrap-table>extensions>editable>bootstrap-table-editable.js下的$.each(this.columns, function (i, column) 方法(78行左右)下添加下几行代码

if (column.editable.type == "select" && column.editable.source == null) {
  column.editable.source = that.getData()[0][column.field]
}

最终效果就如下图所示了:
这里写图片描述

该源码已经放在的GitHub上了https://github.com/huanbia/bootstrap-table,可访问index5.htm来查看

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值