我正在尝试将 ApplicationController 绑定到 IndexController。这是我的jsfiddle。总而言之,这是我在应用程序控制器中的绑定
indexIsClickedBinding: "App.indexController.isClicked",
isIndexClicked: function() {
alert("its changed to " + this.get("indexIsClicked") ) ;
}.observes('indexIsClicked'),
所以,当被点击IndexController 中的值已更改,但 indexIsClickedBinding 不执行任何操作。有什么建议我的代码有什么问题吗?
Cheers
虽然解决方案很简单,但让我尝试解释一下。如果您不确定,请随时提出任何问题。
您已绑定到某个属性instance of App.indexController
。然而,这个实例不存在,因为 Ember.JS 不再将控制器的实例直接放在App
.
它曾经驻留在App
在 Ember 的早期版本中,但不再是了,因为使用绝对名称引用控制器是不好的做法,因为它会创建紧耦合控制器之间。
这就是为什么 Ember.JS 有其他方法来引用控制器。在当前控制器中需要其他控制器是一种常见的要求。 Ember.JS 有以下方法:
-
this.controllerFor()
in Ember.Route
: http://emberjs.com/guides/routing/setting-up-a-controller/
- 然而,controllerFor 现已被弃用,取而代之的是:
-
needs
它告诉当前控制器需要访问哪些控制器:https://github.com/emberjs/ember.js/pull/1731
因此,如果我们实施needs
,那么您的控制器现在可以访问另一个控制器及其拥有的属性:http://jsfiddle.net/uB5tX/7/
通过使用needs
,我们松散耦合了控制器。我们通过名称引用了它,Ember.JS 将为我们查找控制器。如果我们改变App
那么我们不需要更改任何内容,并且如果/当 Ember.JS 更改控制器的行为时,我们不需要更新我们的needs
再次,因为当行为改变时,needs
还将更新,带回正确的控制器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)