为什么这种绑定到另一个 Ember 对象不起作用



我已经设置了一个我认为应该有效的 Ember 绑定的简单示例:http://jsbin.com/aBekITeT/1/edit

为什么控制器的 isTrue 属性与模型的属性不同步?不要寻找任何"把东西放在窗户上是不好的做法"之类的东西(除非这实际上是破坏它的东西);我在这里寻找理解。

我对 http://emberjs.com/guides/object-model/bindings/的阅读使我相信它应该以这种方式工作。有人可以解释我可能解释错误的地方吗?

除非这真的是破坏它的原因

这才是真正打破它的原因。绑定仅适用于 Ember 对象。 window不是余烬对象。还有一个路径错误的问题,这是一个图表:

   if isTrueBinding is "appController.isTrue",        This will:
   this won't work
               +--------------+                    +--------------+
               |              |                    |              |
      +-------+|    window    |+-----+             |    window    |
      |        |              |      |             |              |
      |        +--------------+      |             +--------------+
      v                              v                 +
  +---------------+        +--------------+            |
  | appController |        |  mod         |            |
  |---------------|        |--------------|            v
  | isTrue        |        |isTrueBinding |        +--------------+
  |               |        |              |        |  mod         |
  |               |        |              |        |--------------|
  |               |        |              |        |isTrueBinding |
  |               |        |              |        |appController |+---> +---------------+
  |               |        |              |        |              |      | appController |
  |               |        |              |        |              |      |---------------|
  |               |        |              |        |              |      | isTrue        |
  +---------------+        +--------------+        |              |      |               |
                                                   |              |      |               |
                                                   |              |      |               |
                                                   +--------------+      |               |
                                                                         |               |
                                                                         |               |
             i.e. bindings are implicitly pointing to "this",            |               |
             unless they start with a capital letter.                    +---------------+

当绑定以大写字母开头时,引用全局对象,例如:

window.Currency = Em.Object.create({
  "USD": "$"
});
App.MyObject = Em.Object.extend({
  currencyBinding: "Currency.USD"
});

但是,在 Ember 中使用绑定绑定到全局对象并不被认为是好的风格 - 最佳做法是使用依赖注入来访问共享对象。如果您发现自己需要使用全局绑定,这可能是您需要重构的迹象。

最新更新