如何定期更新 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 数据,您只需在控制器中添加递归 setTimeoutsetInterval 并设置 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中使用模型在页面之间传送一些数据?

Ember - 在视图中显示模型数据

Ember-cli 按名称过滤模型,带有 html 选择选项

当我在 ember 数据中创建或更新 (belongs_to) 模型和 (has_many) 模型中的自动同步更新列时

如何中止Ember Data发出的HTTP请求?

ember.js 和服务器