【问题标题】:Mojo SDK - set a timerMojo SDK - 设置计时器
【发布时间】:2009-07-19 03:49:28
【问题描述】:

我正在为 Palm Pre 构建一个应用程序。

我有一个简单的问题:如何设置一个计时器,让某些代码在经过一定时间后运行?

我尝试使用常规的旧 javascript setTimeout,但它似乎不起作用。

这是我尝试过的:

setTimeout(this.someFunction, 3000);
setTimeout('this.someFunction()', 3000);

似乎都没有。我怎样才能做到这一点?

【问题讨论】:

    标签: webos palm-pre mojo-sdk


    【解决方案1】:

    原来原型javascript框架被Mojo使用了。

    我可以通过以下方式解决这个问题:

    this.someFunction.delay(seconds, [functionArgs,]);
    

    让我感到困惑的一件事是delay 方法改变了this 的值,所以延迟函数不能指望this 会和你直接调用它一样。

    【讨论】:

    • 您如何解决您描述的“这个”问题。如果我有一个名为 txtmodel 的模型,其属性名为 value。在延迟函数之外,我只需调用 this.txtmodel.value = 'foo'
    • 好吧,这对我来说只是一个“duh”的时刻。我只是将对此的引用传递给我的延迟函数,它可以工作。感谢您的提示!
    • @cody 另一个(可能更好的)解决方案是使用原型“绑定”方法来确保在调用该方法时“this”始终是您所期望的。
    【解决方案2】:

    @TM:感谢您指出 Prototype 的 bind() 方法。昨天我在 setTimeout() 问题上苦苦挣扎,最终像你指出的那样使用 Prototype 的 delay() 方法,然后今天早上我在 Mitch Allen 的“Palm webOS”书中看到他在 this.controller 上调用 setTimeout() .window 对象,像这样:
    this.controller.window.setTimeout(this.someFunction.bind(this), someNumberOfMilliseconds);

    如果我没有一直在寻找确切的解决方案,我认为我不会注意到 this.controller.window 的使用,现在我注意到书中的几个地方 this.someFunction.bind(this ) 被使用,尽管他从未解释过它的作用。现在我知道了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多