我正在使用API为DataTable的Yahoo here。
一旦渲染了网格,我就很难更改数据。我正在使用jQuery通过AJAX或客户端数据岛获取数据,并需要将其重新放入网格中。
DataTable API中没有setDataSource方法,更改'dataSource.liveData'不会更新网格。
// does not work
dataTable.dataSource.liveData = [ {name:"cat"}, {name:"dog"}, {name:"mouse"};
我基于代码的示例是basic LocalDataSource example。
如何在不必完全重新创建表的情况下更新数据源。我不想使用进行异步调用的YUI数据源。我需要知道如何“手动”完成这项工作。
答案 0 :(得分:5)
您走在正确的轨道上,您只是忘了告诉数据源将数据发送到数据表。假设您正在使用LocalDataSource
并想要将表中的数据替换为数据源中的数据,那么在替换livingata后,您只需执行
dataTable.getDataSource().sendRequest(null,
{success: dataTable.onDataReturnInitializeTable},
dataTable);
另请参阅API参考中onDataReturnXXX
的其他DataTable
方法。您可以附加新数据而不是替换等。
答案 1 :(得分:3)
我只想补充一点,如果在参数属性中调用getState(),则可以保留分页。
dataTable.getDataSource().sendRequest(null,
{
success: dataTable.onDataReturnInitializeTable,
argument: dataTable.getState()
}
);
答案 2 :(得分:0)
如何更新数据源而无需完全重新创建表?
你的意思是不使用“新”声明吗?如果是这样,我自己不必这样做,但我经常使用YUI。我注意到有一个deleteRows方法可用于删除所有行,0通过表的长度,然后使用addRows,它采用像你的文字数组和索引0,在这种情况下。
你试过这个吗?
修改:查看this example。你想做什么绝对可以做到。该表使用setInterval方法以设定的间隔在本地更新(并不令人惊讶)。看一下setInterval的作用,你可以看到它在数据源的实例上调用makeConnection。该方法听起来像正在进行远程调用,但不一定。
让我们看一下示例中的几行。
// Set up polling
var myCallback = {
success: myDataTable.onDataReturnInitializeTable,
failure: function() {
YAHOO.log("Polling failure", "error");
},
scope: myDataTable
}
myDataSource.setInterval(5000, null, myCallback)
最后一行可以调用一次(或根据需要调用),而不是按照一定的间隔调用它:
myDataSource.makeConnection(null, myCallBack)
调用onDataReturnInitializeTable方法 - 我想你可以直接调用哪个更有意义。
无论如何,只需按照示例进行操作,然后取出不需要的部件。最终看起来onDataReturnInitializeTable方法是关键。
希望有所帮助。
答案 3 :(得分:0)
实际上,我所做的就是使用以下两行代码(而且我的是从ajax返回的,所以与OP有点不同)......
dataTable.dataSource.liveData = eval(o.responseText);
dataTable.load({});
因为如果您阅读datatable.load()
所做的是每个人建议打电话的内容。