1 つの行のレコードを再レンダリングする必要があることを示す簡単な方法はないようです。問題のモデルで変更イベントのシミュレーションを試みることができます。
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
これにより、変更された行ごとに起動するのではなく、すべてのデータ操作を実行してから、再描画するときに呼び出すことができます。お役に立てれば。