我已经设置了一个简单的Ember绑定示例,我认为应该可行:http://jsbin.com/aBekITeT/1/edit
为什么控制器的isTrue属性未与模型同步?没有找到任何“把东西放在窗户上是不好的做法”的东西(除非那实际上是什么打破了它);我在这里寻求理解。
我对http://emberjs.com/guides/object-model/bindings/的看法使我确信它应该以这种方式运作。有人可以解释我的解释错误吗?
答案 0 :(得分:3)
除非那实际上是什么打破了它
这就是实际打破它的原因。绑定仅适用于Ember对象。 window
不是Ember对象。路径错误也存在问题,这是一个图表:
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中不被认为是好的样式 - 最佳实践是使用依赖注入来访问共享对象。如果您发现自己需要使用全局绑定,这可能是您需要重构的一个标志。