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);
如果您稍后需要取消间隔,第二个可能会更容易,但这取决于您喜欢哪个。
我是 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);
如果您稍后需要取消间隔,第二个可能会更容易,但这取决于您喜欢哪个。