2012-12-15 129 views
1

我想用最新的数据每60秒刷新一次Kendo UI网格的内容。Kendo UI网格:每60秒用新数据刷新网格数据:dataSource and observe()

编辑:这里是如何的数据源是处于初始配置分配:

parsedData = $.parseJSON(data); 

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

$("#grid").kendoGrid({ 
    dataSource: dataSource, 
    . . . 

能电网的DataSource只需在一个被重新分配一举?或者,单独删除dataSource.data中的项目还是清除数组,然后注入新项目或全部替换数组会更好? Kendo dataSource中观察模式的实现是否表明一种方法优于另一种方法?

我还没有着手这方面的工作,但是根据我对网格的经验,回到Visual Basic的初期,改变网格的数据源一直有不良的副作用,我没有理由期待这个将是更平滑的航行。希望我错了。

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

+0

你的意思是只刷新数据? – NunoCarmo

+0

@NoCarmo:结构保持不变;行数可能会改变,并且各个单元格的内容可能会有所不同。 – Tim

+0

您是否使用kendo dataSource来获取您的数据? – NunoCarmo

回答

0

要更新网格,您需要处理dataSource上的更改事件。

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

这时候你改变你的数据源的数据应该更新您的网格。

+0

但我的问题是,什么是最好的方式来改变dataSource的数据?我是否创建一个新的dataSource对象?替换现有dataSource对象的数据数组?从现有数据数组中删除项目(例如pop()),然后每次插入一个新项目? – Tim

2

要更新网格的数据源中使用的data方法:

$("#grid").data("kendoGrid").dataSource.data(parsedData); 
1

从你的示例代码位,它看起来像你的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(); 
} 
+0

我的网格并不真正知道它是如何获取数据的;在网格实例化时,我已经有了一个Kendo dataSource对象,该对象被分配给网格的dataSource属性。所以我按照你的建议一举替换了grid.dataSource.data的内容:'grid.dataSource.data(parsedData)'。这种简单易行的方法的唯一缺点是,对我们来说这是一个显着的缺点,即网格不保留任何分组展开折叠状态的记忆。 – Tim

+0

如果我们使网格负责获取自己的数据,并使用sync()方法刷新具有新远程数据的网格,那么分组是持久的,还是sync()会导致基本的重新绑定,导致网格恢复为un分组状态? read(),sync(),数据(新数据)都是调用相同基本行为的同义方式吗? – Tim

+0

'.read()'从服务器获取新数据。 '.sync()'将客户端上的所有未决更新推送到服务器(不知道它是否也读取新数据)。 '.data()'用你得到的数据替换数据,而不用打到服务器。 – CodingWithSpike

7

我们正在使用的剑道2012.3.1315.340版本和我们是这样工作的:

$("#YourGridNameHere").data("kendoGrid").dataSource.read(); 

就像你说的是对数据源读取数据一次。我们通常在requestEnd事件处理程序上执行它。

我希望这有助于某人。

+0

感谢您的建议:如果我们让网格负责获取其数据(即,用于执行填充其数据源的XHR),那么网格中出现在上午10:00取数据集但不再存在的行在上午10:01获取的数据集中,还是哪些已更改?这样的行从网格中移除了吗?假设网格在“状态”列上分组,并且特定行的状态从“在PaintShop”更改为“InShipping”; read()会导致该行移动到正确的组?或者当read()被执行时,网格没有分组? – Tim

+0

只是完美^ _^ –

+0

谢谢,但这给“TypeError:$(...)。数据(...)是未定义”错误。我也浏览了很多页面,尝试了这个解决方案的不同版本,但仍然得到相同的错误。任何想法? –