DataTable
リモート JSON から入力された がありますDataSource
。
var dataSource = new Y.DataSource.Get({ source: url });
dataSource.plug(Y.Plugin.DataSourceJSONSchema, {
schema: {
resultListLocator: "results",
resultFields: [ "field1", "field2" ]
}
});
var table = new Y.DataTable({ columns = ["col1", "col2"] }
table.plug(Y.Plugin.DataTableDataSource, { datasource: dataSource });
table.render("#table");
table.datasource.load({ request: query });
テーブル内のデータを定期的に更新しようとしています。 フォーラムの投稿者は、定期的に load を呼び出すことを推奨しており、これを試してみたところ、期待どおりに動作しました (Loading... メッセージを表示せずにデータが更新されます)。
Y.later(1000/*ms*/, table.datasource, table.datasource.load, { request: query }, true);
ただし、Chrome でメモリ リークが発生していることに気付きました。表のセルがメモリから削除されていないようです。Chrome のヒープ プロファイラはHTMLTableCellElement
、Detached DOM tree
.
これはデータを更新する最良の方法ですか? もしそうなら、古い表のセルをクリアする方法はありますか?
代替案
データの定期的なフェッチを実行できるdatatable-polling
モジュールもあります。ただし、これが YUI3 でどのように使用されるかの例はありませんDataTable
。ただし、YUI2 の例では、次のようなことができることが示されています。
dataSource.setInterval(1000,
{
request: query,
callback:
{
success: function(e) { table.onDataReturnInitializeTable },
failure: function() { Y.log("Polling failure", "error"); }
}
});
ただし、これはload
とにかくボンネットの下で行っていることのようです:
load: function(config) {
config = config || {};
config.request = config.request || this.get("initialRequest");
config.callback = config.callback || {
success: Y.bind(this.onDataReturnInitializeTable, this),
failure: Y.bind(this.onDataReturnInitializeTable, this),
argument: this.get("host").get("state") //TODO
};
var ds = (config.datasource || this.get("datasource"));
if(ds) {
ds.sendRequest(config);
}
},