Ember 运行 稍后在 coffeescript 中无法正常工作

Ember run later in coffeescript not working correctly

我是 Ember 的新手,所以我完全被这个难住了。 运行 后来似乎可以工作,但它似乎忽略了这样一个事实,即它应该每 5 秒只 运行 一次更新状态,实际上它似乎只是不断地立即继续调用 getServers 方法然后立即再次调用自身 (startWatchingStatus)。由于这段代码,页面实际上从未被渲染过。我一定是在这段代码中做错了什么:

App.ServersController = Ember.ArrayController.extend(

    startWatchingStatus: () ->
        controller = @
        controller.getServers()
        Ember.run.later(controller, () ->
        controller.startWatchingStatus()
        , 5000)

    getServers: () ->
        App.ServerObject.getServers().done((data) ->
            controller.set('content', data)
            )

    init: () ->
        @_super()
        controller = @
        controller.startWatchingStatus()

你误解了Ember.run.later的用法,它会等待5000ms然后执行你的方法,它不会一直为你重复。为此,您可以像这样将调用链接到 Ember.run.later(抱歉,不知道 coffescript,但您会明白的):

var callback = () => {
  this.getServers();
  Ember.run.later(this, callback, 5000);
};

Ember.run.later(controller, callback, 5000);

或者您可以使用简单的 window.setInterval 并将其包装在内部的运行循环中。

window.setInterval(()  => {
  Ember.run(() => {
    controller.getServers();
  });
}, 5000);

如果您稍后需要取消间隔,第二个可能会更容易,但这取决于您喜欢哪个。