如何在创建后更改YUI数据网格上的数据源

时间:2009-06-23 21:11:07

标签: datatable yui

我正在使用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数据源。我需要知道如何“手动”完成这项工作。

4 个答案:

答案 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()所做的是每个人建议打电话的内容。