2012-12-27 41 views
1

我正在使用YUI 3.7.3,並有一個DataTable的實例。表中的行由'會話'對象表示,表列中顯示的值來自每個會話對象的內部列表(即,我爲每列指定'格式化程序')。當新數據添加到內部列表(基本上,更新的會話狀態),我想能夠告訴DataTable該行需要被標記髒/重新顯示。但是如何? DataTable.modifyRow()似乎沒有這樣做,因爲我實際上並沒有修改會話對象的直接屬性 - 我正在將數據添加到會話的子列表中。YUI Datatable - 如何將行標記爲已修改?

告訴DataTable需要重新顯示特定行的建議方式是什麼?

回答

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。 對於更新的數據表視圖的目的,這似乎並不重要,因爲你可以有一樣好做到了這一點:

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當你要重畫,而不是燒製修改的每一行。希望這可以幫助。