Javascript 为什么绑定到另一个余烬对象不起作用?

Javascript 为什么绑定到另一个余烬对象不起作用?,javascript,ember.js,Javascript,Ember.js,我已经建立了一个简单的余烬绑定示例,我认为它应该可以工作: 为什么控制器的isTrue属性与模型的isTrue属性不同步?不寻找任何“把东西放在窗户上是不好的做法”之类的东西(除非这实际上是打破窗户的原因);我在这里寻找理解 我的阅读使我确信它应该这样工作。有人能解释一下我可能解释错了什么吗 除非这是破坏它的真正原因 这就是破坏它的原因。绑定仅适用于Ember对象窗口不是余烬对象。路径错误也有一个问题,下面是一个图表: if isTrueBinding is "appController.

我已经建立了一个简单的余烬绑定示例,我认为它应该可以工作:

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

我的阅读使我确信它应该这样工作。有人能解释一下我可能解释错了什么吗

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

这就是破坏它的原因。绑定仅适用于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中,使用绑定绑定到全局对象并不是一种好的风格——最佳实践是使用依赖注入来访问共享对象。如果您发现自己需要使用全局绑定,这可能是您需要重构的迹象

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

这就是破坏它的原因。绑定仅适用于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中,使用绑定绑定到全局对象并不是一种好的风格——最佳实践是使用依赖注入来访问共享对象。如果您发现自己需要使用全局绑定,这可能是您需要重构的迹象

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

这就是破坏它的原因。绑定仅适用于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中,使用绑定绑定到全局对象并不是一种好的风格——最佳实践是使用依赖注入来访问共享对象。如果您发现自己需要使用全局绑定,这可能是您需要重构的迹象

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

这就是破坏它的原因。绑定仅适用于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中,使用绑定绑定到全局对象并不是一种好的风格——最佳实践是使用依赖注入来访问共享对象。如果您发现自己需要使用全局绑定,这可能是您需要重构的标志。

但是appController是一个ember对象吗?我没有绑定到Window的属性事实上,这甚至不是唯一被破坏的东西。绑定是相对于您在其中声明它们的对象的。因此,到
appController.isTrue
的绑定指向window.mod.appController.isTrue,而您需要的属性位于window.appController.isTrue。即使你可以通过窗口对象绑定(你不能),它也不会工作,因为路径错误似乎暗示它是一个全局路径指南很混乱,我已经提交了一个。这非常有用。你能详细说明当它们以大写字母开头时会发生什么吗?但是appController是一个余烬对象吗?我没有绑定到Window的属性事实上,这甚至不是唯一被破坏的东西。绑定是相对于您在其中声明它们的对象的。因此,到
appController.isTrue
的绑定指向window.mod.appController.isTrue,而您需要的属性位于window.appController.isTrue。即使你可以通过窗口对象绑定(你不能),它也不会工作,因为路径错误似乎暗示它是一个全局路径指南很混乱,我已经提交了一个。这非常有用。你能详细说明当它们以大写字母开头时会发生什么吗?但是appController是一个余烬对象吗?我没有绑定到Window的属性事实上,这甚至不是唯一被破坏的东西。绑定是相对于您在其中声明它们的对象的。因此,到
appController.isTrue
的绑定指向window.mod.appController.isTrue,而您需要的属性位于window.appController.isTrue。即使你可以通过窗口对象绑定(你不能),它也不会工作,因为路径错误似乎暗示它是一个全局路径指南很混乱,我已经提交了一个。这非常有用。你能详细说明当它们以大写字母开头时会发生什么吗?但是appController是一个余烬对象吗?我没有绑定到Window的属性事实上,这甚至不是唯一被破坏的东西。绑定是相对于您在其中声明它们的对象的。因此,到
appController.isTrue
的绑定指向window.mod.appController.isTrue,而您需要的属性位于window.appController.isTrue。即使你可以通过窗口对象进行绑定(你不能),它也不起作用,因为路径错误似乎意味着它是一个全局路径。指南很混乱,我已经提交了一个。这非常有用。你能详细说明当它们以大写字母开头时会发生什么吗?