Sim*_*onC 5 javascript yui dom yui3
我有一个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 });
Run Code Online (Sandbox Code Playgroud)
我试图让表中的数据定期刷新. 一个论坛海报建议定期调用负载,我已经尝试过并且它正如我希望的那样工作(数据刷新而不显示正在加载...消息).
Y.later(1000/*ms*/, table.datasource, table.datasource.load, { request: query }, true);
Run Code Online (Sandbox Code Playgroud)
但是,我注意到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"); }
}
});
Run Code Online (Sandbox Code Playgroud)
然而,看起来这正是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);
}
},
Run Code Online (Sandbox Code Playgroud)
datasource-polling在这种情况下不会帮助您,因为Plugin.DataTableDataSource不会使 DataTable 侦听 DataSource 中的所有更改。最简单的轮询方法Plugin.DataTableDataSource是自己设置间隔,如下所示:
var datasource = new Y.DataSource.IO(...);
var table = new Y.DataTable(...);
table.plug(Y.Plugin.DataTableDataSource, {
datasource: datasource
});
// call load() every second
var timer = Y.later(1000, table.datasource, 'load', {
request: foo
}, true);
// later on, stop polling
timer.cancel();
Run Code Online (Sandbox Code Playgroud)
你提到的内存泄漏是有可能的。DataTable 正在不断开发中,它将在内存管理方面变得更好。然而,如果您有可重现的案例和全面的测量,您绝对应该在 YUI 的 GitHub 存储库中提出问题。
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |