我的应用程序有一个nodes
池和几个子节点(queues
,services
,...)。我需要不断访问nodes
池,我需要确保数据与后端数据保持同步。由于多种原因,后端中的数据可能会发生变化,例如:
通常在访问路由#/nodes/index
时会加载对象,但有时我想强制刷新商店,而不希望用户执行对正确路径的访问。我该如何以编程方式触发?
答案 0 :(得分:2)
使用ember数据,您可以使用重新加载数据。 recordArray.update()
,并使用window.setInterval
安排到您想要的时间。解析RecordArray
时会获得Model.find()
个实例。
Model.find().then(function(recordArray) {
});
执行此操作的简单方法是以ember方式,在model
挂钩中返回数据,并在afterModel
挂钩中获取recordArray实例。因此,使用此实例可以使用update
在某个特定时间执行setInverval
,例如:
App.NodesIndexRoute = Ember.Route.extend({
model: function() {
return App.Nodes.find();
},
afterModel: function(recordArray) {
setInterval(function() {
recordArray.update();
}, 1000); //each second
}
});
请注意转换到节点索引路由,因为每次都会创建一个新的setInterval
,并且每次转换到该路由时会加载n次。
要解决此问题,请存储setInterval
返回的ID,然后使用clearInterval
删除上一个任务:
afterModel: function() {
if (this.get('jobId')) {
clearInterval(jobId);
}
var jobId = setInterval(function() {
record.update()
}, 1000); // each second
this.set('jobId', jobId);
}
我创建了一个示例here。