使用SlickGrid复选框格式化程序/编辑器的数据不一致

时间:2012-07-05 10:40:47

标签: javascript slickgrid

我正在查看SlickGrid的{​​{1}} / editors功能,以了解这些功能如何修改用于构建网格的formatters对象(因为据我所知,对表的修改会自动复制到data对象。

我正在查看一个特定示例,该示例显示如何编辑data并将其格式化为复选框(而不是处理booleanstrue字符串)并注意到值已复制到false对象不一致。

要了解我的意思,请按照以下步骤编辑前4行的data列:
- 任务0 :请勿触摸
- 任务1 :检查
- 任务2 :请勿触摸
- 任务3 :选中并取消选中

enter image description here

现在在您的firebug控制台中,提醒数据对象:

enter image description here

以下是effortDriven字段的值:
- 任务0 effortDriven
- 任务1 true
- 任务2 checked
- 任务3 false

正如您所看到的,对于最初应该是(void 0)的字段,我们最终会得到4个不同的值。作为一般性评论,我认为boolean的逻辑只是检查可视化,但保留formatters/editors对象的完整性:因此我强烈建议人们使用data来在使用SlickGrid时仔细检查其data对象的更新方式,并且不要假设保留数据完整性。)

如何在仍然使用用户界面上的复选框的同时确保我的formatters/editors对象保留2个data值?

2 个答案:

答案 0 :(得分:0)

编辑CheckboxEditor中的slick.editors.js功能,如下所示:

this.applyValue = function (item, state) {
  //item[args.column.field] = state;  <-- remove that line, add lines below
  if (state == 'checked') {
      item[args.column.field] = true;
  } else {
      item[args.column.field] = false;  
  }
};

答案 1 :(得分:0)

我也发现了这个问题。在CheckboxEditor中的自定义slick.editors.js中,只需更改值序列化程序:

function CheckboxEditor(args) {

    ...

    this.serializeValue = function () {
        return $select.attr("checked") ? true : false;
    };

    ...

}