Ember.js:控制器之间的数据绑定

Jea*_*eri 5 data-binding controller ember.js

我正在尝试将ApplicationController绑定到IndexController.这是我的jsfiddle.总而言之,这是我在Application控制器中的绑定

indexIsClickedBinding: "App.indexController.isClicked",

isIndexClicked: function() {
    alert("its changed to " + this.get("indexIsClicked") ) ;
}.observes('indexIsClicked'), 
Run Code Online (Sandbox Code Playgroud)

因此,当IndexController中的isClicked值发生更改时,indexIsClickedBinding不会执行任何操作.我的代码中有什么错误的建议吗?

干杯

Wil*_*ney 23

虽然解决方案很简单,但我试着解释一下.如果您不确定,请随时提出任何问题.

你绑定了一个实例的属性App.indexController.但是,此实例不存在,因为Ember.JS不再直接放置控制器的实例App.

它曾经驻留App在以前版本的Ember中,但不再存在,因为使用其绝对名称引用控制器是不好的做法,因为它会在控制器之间创建紧密耦合.

这就是Ember.JS有其他方法来引用控制器的原因.在当前控制器中需要其他控制器是一种常见的要求.Ember.JS有以下方法:

因此,如果我们实现了needs,那么你的控制器现在可以访问另一个控制器,以及它拥有的属性:http://jsfiddle.net/uB5tX/7/

通过使用needs,我们松散地耦合了控制器.我们用它的名字引用它,Ember.JS将为我们查找控制器.如果我们改变App那么我们将不需要改变任何东西,如果/当Ember.JS改变控制器的行为时,我们不应该needs再次更新我们,因为当行为改变时,那么它needs也会更新,带回来正确的控制器.