意外覆盖的财产

时间:2013-09-23 18:31:59

标签: ember.js

我有一个具有以下属性的控制器:

App.MyController = Ember.ArrayController.extend({
   isSomething: false,
   notSomething: Ember.computed.not('isSomething')
}

由于某些原因,当我在调试器中查看控制器时,我在“自己的属性”部分中定义了isSomething,但后来也作为“App.MyController”中的属性。在“App.MyController”中,调试器声称isSomething被“它自己的属性覆盖”,我猜它是,但我是如何进入这种状态的?

在旁注中,notSomething计算属性以 false 开头,并且当我在“自己的属性”中更改isSomething的值时不会更改(我可以'在“App.MyController”部分中更改它。

更新

好吧,它似乎比上面的代码更复杂。我仍然在黑暗中,但这就是我能说的......

  1. MyController是一个数组控制器,其中每一行都显示一个View,该View在引用notSomething属性的模板中有条件。
  2. 如果条件语句被声明为{{#if notSomething}}那么上面提到的属性的覆盖不会发生,但我认为这是因为它正在查看属性的视图...确实改变了控制器中的notSomething变量无效。
  3. 如果条件语句声明为{{#if controller.notSomething}},则上述 生效。
  4. 希望这有点帮助。任何帮助将不胜感激。

    更新2

    通过在调试器中查看控制器,我的意思有些混乱。这是一个希望澄清的截图:

    请注意,实际的类名是UomsController(不是MyController),但代码片段是直接表示。

1 个答案:

答案 0 :(得分:2)

我认为你在这里看到的是以下内容。当您调用Ember.ArrayController.extend时,您正在向其传递包含默认值的哈希值。您可以在App.UomsController / App.MyController下的调试器中看到这些值。 您会看到类的实例的默认值/模板。Own properties部分中,您可以看到班级实例的实际值。因此,在控制器上设置属性后,您会看到实际值。所以这对我来说很好,你不必担心: - )

<强> TL; DR “自有属性”部分显示了类实例的值,而名为Controller的部分显示了传递给extend方法的默认值。