使用带有Rails后端的Ember-Data进行轮询

时间:2013-07-28 13:59:56

标签: javascript ember.js ember-data

背景

我更习惯Rails,但试图通过切换到MVC来改进我的客户端javascript。 Ember似乎非常适合我(它与Rails的良好集成以及类似于配置方法的约定)。

我正在使用Ruby 2.0.0,Rails 4.0.0& Ember 1.0.0-rc6.3因此意识到这一切都很新。

然而,到目前为止,我已经成功地通过JSON API显示数据库中的数据而没有任何问题,并且它运行良好。

问题

我目前正在努力在数据库发生变化时更新数据。

我最初的方法是首先使用轮询来保持客户端数据的更新,因为后台作业处理并更新数据库(我想进一步尝试SSE和Live以使这个过程更好 - 但轮询开始用)。

在我的控制器

中,轮询方面正常运行
App.AnalysesController = Ember.ArrayController.extend
  loaded: (->
    setTimeout (=> @poll()), 1000
  ).observes('content.isLoaded')

  poll: ->
    console.log @get('content')
    @get('content').reload()

我以为我找到了解决此问题的解决方案:

https://github.com/emberjs/data/commit/278a0b863f0b1b2494fe2319ac12be6167195f6b

您可以重新加载模型。

不幸的是,当我尝试时,我收到了这个错误...

Uncaught ReferenceError: reload is not defined

我不理解,因为看起来我的内容格式正确且没有更新

Class {type: function, store: Class, isUpdating: false, toString: function, constructor: function…}

然而 - 这有效......

App.AnalysesController = Ember.ArrayController.extend
  loaded: (->
    setInterval (=> @poll()), 1000
  ).observes('content.isLoaded')

  poll: ->
    @set('content', App.Analysis.find())

虽然我感觉不对 - 我应该使用的模型肯定不会复制查询查询?

如果有人有任何想法为什么重装不起作用我真的很感激,因为我已经打了一个墙,但直到现在一直在享受学习Ember。

谢谢!

1 个答案:

答案 0 :(得分:1)

重新加载生活在各个型号上,而不是模型阵列上。您的第二种方法是正确的方法,除非您想迭代数组控制器中的项并调用重新加载。