Timer 剑道UI网格:使用新数据每隔60秒刷新网格数据:dataSource和observe()

Timer 剑道UI网格:使用新数据每隔60秒刷新网格数据:dataSource和observe(),timer,kendo-ui,grid,kendo-grid,Timer,Kendo Ui,Grid,Kendo Grid,我想用最新数据每隔60秒刷新剑道UI网格的内容 编辑:以下是在初始配置时分配数据源的方式: parsedData = $.parseJSON(data); var dataSource = new kendo.data.DataSource({ data: parsedData }); $("#grid").kendoGrid({ dataSource: dataSource, . . . 网格的数据源是否可以一下子重新分配?或者最好单独删除dataSource.

我想用最新数据每隔60秒刷新剑道UI网格的内容

编辑:以下是在初始配置时分配数据源的方式:

parsedData = $.parseJSON(data);

var dataSource = new kendo.data.DataSource({
    data: parsedData
});

$("#grid").kendoGrid({
    dataSource: dataSource, 
    . . .
网格的数据源是否可以一下子重新分配?或者最好单独删除dataSource.data中的项,或者清除数组,然后注入新项或替换整个数组?剑道数据源中观察模式的实现是否表明一种方法优于另一种方法

我还没有开始这样做,但根据我在网格方面的经验,追溯到Visual Basic的早期,更改网格的数据源总是会产生不良的副作用,我没有理由期望这会更顺利。希望我错了


另一个编辑#(2013年4月26日):如果有一种方法可以用一组与以前结构相同的新行刷新网格的基础数据,这种方法可以保留网格分组的展开/折叠状态,这非常适合我们的目的。

要更新网格,您需要处理数据源上的更改事件

change: function() {
    var grid = $(YouGridSelector).data("kendoGrid");
    grid.refresh();
}

当您更改数据源的数据时,这应该会更新网格

要更新网格的数据源,请使用以下方法:


从您的示例代码来看,您的
DataSource
似乎正在使用本地数据,而不是获取远程数据

如果它正在获取远程数据,您只需调用:

$("#grid").data("kendoGrid").dataSource.sync();
如果您的网格不是只读的,它将从服务器重新获取,并执行任何未完成的更新或删除

要刷新本地数据,只需在DaaSource上设置
.data
属性:

$("#grid").data("kendoGrid").dataSource.data(parsedData);
我面前没有一个可用的示例来尝试它,但是如果在调用
dataSource.data()
函数后网格行没有刷新,那么您可能还需要调用网格上的刷新:

function updateGridData (parsedData) {
    var grid = $("#grid").data("kendoGrid");
    grid.dataSource.data(parsedData);
    grid.refresh();
}

我们使用的是剑道2012.3.1315.340版本,对我们而言,其工作方式如下:

$("#YourGridNameHere").data("kendoGrid").dataSource.read();
就像您告诉数据源再次读取数据一样。我们通常在requestEnd事件处理程序上执行此操作


我希望这对某些人有所帮助。

你的意思是仅仅刷新数据吗?@NunoCarmo:结构保持不变;行数可能会更改,各个单元格的内容可能会有所不同。是否使用剑道数据源获取数据?@NUNOCAMO:请参阅编辑。谢谢,但我的问题是,更改数据源数据的最佳方式是什么?我是否创建新的数据源对象?是否替换现有数据源对象的数据数组?从现有数据数组中一次删除一个项目(例如pop()),然后一次插入一个新项目?我的网格不知道它是如何获取数据的;在网格实例化时,我已经完全填充了一个Kendo数据源对象,该对象被分配给网格的数据源属性。因此,我遵照您的建议,一次性替换grid.dataSource.data的内容:
grid.dataSource.data(parsedData)
。这种简单易用的方法的唯一缺点,对我们来说也是一个明显的缺点,就是网格没有保留任何分组扩展折叠状态的内存。如果我们让网格负责获取自己的数据,并使用sync()方法用新的远程数据刷新网格,分组是否会持久化,或者sync()是否会导致基本的重新绑定,从而导致网格恢复为未分组状态?read()、sync()、data(newdata)都是调用相同底层行为的同义方式吗?
。read()
从服务器获取新数据
.sync()
将在客户端上进行的任何挂起的更新推送到服务器(不确定它是否也读取新数据)
.data()
在不影响服务器的情况下,用您获得的任何数据替换数据。我对这个问题的回答可能有助于您在刷新过程中保持展开/折叠状态:是的,该答案的出发点是假设组未持久化,但我想知道是否有任何方法可以在一开始就不破坏分组。另外,我认为在使用数据(newData)时UID不是持久的。感谢您的建议:如果我们让网格负责获取其数据(即执行填充其数据源的XHR)网格中的行在上午10:00获取的数据集中出现,但在上午10:01获取的数据集中不再出现,或者发生了变化,这些行会发生什么情况?这些行是否已从网格中删除?假设网格在Status列上分组,特定行的状态从“In PaintShop”更改为“InShipping”;read()是否导致行移动到正确的组?或者执行read()时网格是否未分组?谢谢,但这会导致“TypeError:$(…)。数据(…)未定义”错误。我也看了很多页,尝试了这个解决方案的不同变体,但仍然得到相同的错误。有什么想法吗?
$("#YourGridNameHere").data("kendoGrid").dataSource.read();