如何定期更新 Ember 的模型(例如在 setInterval 中)?
Posted
技术标签:
【中文标题】如何定期更新 Ember 的模型(例如在 setInterval 中)?【英文标题】:How to update Ember's model periodically (such as in setInterval)? 【发布时间】:2014-03-09 15:45:56 【问题描述】:我有一个 Ember 应用程序,其模型来自 Ajax 调用。第一次调用效果很好,我有 Ember.Route
的模型钩子返回一个承诺给检索要显示的数据的 Ajax 调用。
但是这些数据在后端经常变化,我想让 webapp 定期轮询服务器,比如每 5 秒一次,并更新,或者更好的是,将模型数据完全与新检索的数据交换。
使用 Ember.js 执行此操作的适当方法是什么?我是 Ember 的新手,所以我对此有点迷茫。
【问题讨论】:
【参考方案1】:我认为这是Ember.run.later
的一个很好的用例,它限制了函数调用的频率。
你可以只为你的模型添加一个刷新,类似于这样:
App.Model = DS.Model.extend(
poll: function()
var _this = this;
Ember.run.later( function()
_this.reload();
_this.poll();
, 500);
.observes('didLoad'),
);
【讨论】:
感谢您的回复。就我而言,我试图查看触发这些 ajax 调用并使用 ember 定期更新模型的正确方法是什么。如果我不使用诸如 Ember 之类的 MVC 框架,我会使用 setInterval 来完成这项工作。 哦,我明白你的意思了.. 太棒了!!谢谢,我希望我也可以将您的答案标记为正确的答案,或者投票更多次:) 我认为在这里使用Ember.run.later
会更合适。对节流的调用不会节流任何东西。 (为了使节流阀有效,您必须使用函数引用,而不是匿名函数。)
这很好,@LukeMelia - 谢谢。我进行了适当的更改。
这不会在一段时间后遇到超过最大调用堆栈大小吗?【参考方案2】:
如果您不使用 Ember 数据,您只需在控制器中添加递归 setTimeout
或 setInterval
并设置 model
属性。这是simple example setting the model from a UI event。
如果您使用的是 ember-data,我认为以下线程有更准确的解决方案:
Ember model reloading in interval How to reload an ember data record?【讨论】:
不要使用 setInterval。大量内存泄漏 避免使用 setInterval 的另一个原因:它会在您的集成测试中导致异步副作用。见discuss.emberjs.com/t/…以上是关于如何定期更新 Ember 的模型(例如在 setInterval 中)?的主要内容,如果未能解决你的问题,请参考以下文章
Ember-cli 按名称过滤模型,带有 html 选择选项