YUI数据表 - 如何将行标记为已修改?

时间:2012-12-27 01:54:09

标签: datatable yui3

我正在使用YUI 3.7.3,并且有一个DataTable实例。表中的行由'Session'对象表示,表列中显示的值是从每个Session对象的内部列表派生的(即,我为每列指定'formatter'。)当添加新数据时内部列表(基本上,更新的会话状态),我希望能够告诉DataTable该行需要标记为脏/重新显示。但是怎么样? DataTable.modifyRow()似乎没有这样做,因为我实际上并没有修改Session对象的直接属性 - 我正在将数据添加到Session的子列表中。

告诉DataTable需要重新显示特定行的建议方法是什么?

1 个答案:

答案 0 :(得分:0)

似乎没有一种直接的方法来指示单行的记录需要重新呈现。您可以尝试在相关模型上模拟change事件。

var table = new Y.DataTable({
  columns: [
    { key: 'obj', label: 'nested', formatter: function (o) { return o.value.nested; } }
  ],
  data: [ {obj: {nested: 42}} ]
}).render('#table'), row = table.getRecord(0), data = row.get('obj');

data.nested = 47;
row.fire('change', { changed: { prevVal: data, newVal: data } });

根据您想要模仿Model:change事件的密切程度,您可能希望在更改数据之前执行数据的深层复制,然后将其作为prevVal传递。 为了更新DataTable视图,这似乎并不重要,因为您可以这样做:

row.fire('change');

结果会是一样的。这很脆弱,可能不是如何使用接口。但是,如果您需要完成的只是在更改内部状态后更新视图,而不是触发任何与更改相关的事件,那么DataTable.syncUI是一个更优雅的解决方案。

var table = new Y.DataTable({
  columns: [
    { key: 'obj', label: 'nested', formatter: function (o) { return o.value.nested; } }
  ],
  data: [ {obj: {nested: 42}} ]
}).render('#table'), row = table.getRecord(0), data = row.get('obj');

data.nested = 47;
table.syncUI();

有了这个,您可以执行所有数据操作,然后在想要重绘时调用syncUI,而不是为每个修改的行触发。希望这会有所帮助。