【问题标题】:Ember run later in coffeescript not working correctlyEmber 稍后在咖啡脚本中运行无法正常工作
【发布时间】:2017-01-07 02:26:58
【问题描述】:

我对 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.js coffeescript


    【解决方案1】:

    你误解了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);
    

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

    【讨论】:

    • 我会试试你的建议,但我的代码应该继续重复该方法,因为它应该运行 getServers() 然后等待 5 秒,然后再次调用自身 (startWatchingStatus)。
    • 哦,对,误读了那部分。我的代码应该放在startWatchingStatus 中,然后每次调用getServers。我会更新示例。
    • 随着更改,您的第一个选项与我已经拥有的相同,除了我用咖啡脚本编写的。我开始认为是咖啡脚本引起了我传入的函数的问题。
    • 我刚刚通过 coffeescript.org 的 coffescript 编译器运行了您的代码,据我所知,它似乎对缩进很敏感。由于controller.startWatchingStatus() 与您的Ember.run.later 处于同一缩进级别,因此不会将其用作回调的主体。在它前面添加两个空格似乎可以解决问题。
    • 那是我的问题,非常感谢。所有这些时间都超过了两个空间。 4试了,0试了,2没试。那个在线编译器肯定也能派上用场。
    猜你喜欢
    • 2014-05-22
    • 2013-02-13
    • 2012-02-08
    • 1970-01-01
    • 2023-02-22
    • 2018-01-25
    • 2013-03-27
    • 1970-01-01
    • 2016-08-23
    相关资源
    最近更新 更多