【问题标题】:Use of Ember run loopEmber 运行循环的使用
【发布时间】:2018-03-01 17:24:43
【问题描述】:
我正在尝试了解 Ember 运行循环在应用中的实际使用情况。
这就是我观察到的情况
Ember 有 2 路绑定。所以如果我在我的 JS 代码中更新任何属性值,相应的更改应该会自动反映在 UI 上。
但在某些情况下,我们必须做一些类似的事情
Ember.run.next
Ember.run.scheduleOnce
等
我想了解在哪些情况下我们需要添加 Ember.run.* 以及在哪些情况下值不会在 UI 上自动重新呈现?
【问题讨论】:
标签:
javascript
jquery
ember.js
【解决方案1】:
Ember.run
如果您的代码使用一些非 ember 对象,则大多数时候您会使用 Ember 运行循环。例如,如果您将 jQuery 与 Ember 结合使用。来自docs 的示例:
$('a').click(() => {
Ember.run(() => { // begin loop
// do something with Ember objects here
}); // end loop, jobs are flushed and executed
});
您这样做是为了确保在您自己的代码之前运行所有计算属性、观察者和其他内部 Ember 内容;因此在上面的示例中,您可以确保点击处理程序与您的应用程序的其余部分同步。
如果您未在此处手动定义 Ember 运行,Ember 将尝试为您近似开始和结束。但我不得不说,现在有几年使用 Ember 的经验,大多数时候它都不起作用(或不起作用)。所以你自己定义吧!
其他方法,如 debounce、throttle、schedule 和 scheduleOnce
所有其他方法实际上只是辅助方法。与其他库的区别(例如 Lodash 也有 _.debounce 和 _.throttle 函数)是这些方法也与 Ember Run 循环链接。
如果您要使用其他库,您最终会在函数中包装 Ember.run 方法。使用例如Ember.debounce,您不必担心这些事情。
欲了解更多信息,请阅读here!