1

YUI 3.7.3を使用していて、DataTableのインスタンスがあります。テーブルの行は「Session」オブジェクトで表され、テーブルの列に表示される値は、各Sessionオブジェクトの内部リストから取得されます(つまり、各列に「formatter」を指定します)。内部リスト(基本的には更新されたセッション状態)で、行をダーティ/再表示する必要があることをDataTableに通知できるようにしたいと思います。しかし、どのように?私は実際にはSessionオブジェクトの直接属性を変更していないため、DataTable.modifyRow()はそれを行っていないようです。つまり、Sessionのサブリストにデータを追加しています。

特定の行を再表示する必要があることをDataTableに伝えるための推奨される方法は何ですか?

4

1 に答える 1

0

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これにより、変更された行ごとに起動するのではなく、すべてのデータ操作を実行してから、再描画するときに呼び出すことができます。お役に立てれば。

于 2012-12-30T04:15:39.100 に答える