我的情况是我有一个需要的应用程序控制器'从另一个控制器访问属性,如下所示:
App.ApplicationController = Ember.Controller.extend({
needs: ['sort'],
actions: {
appClicked: function () {
console.log('controllers.sort.isMenuExpanded');
}
}
});
App.SortController = Ember.Controller.extend({
isMenuExpanded: false,
actions: {
menuClicked: function () {
this.toggleProperty('isMenuExpanded');
}
}
})
正如预期的那样,ApplicationController的appClicked功能正确地记录了' false'第一次运行。但是,即使在将isMenuExpanded属性更改为' true'之后,它仍会继续记录false(在SortController中设置的默认值)。通过SortController。
这可能与JavaScript传递值的方式有关。我认为对象是通过引用传递的,当然,如果我将isMenuExpanded属性更改为:
isMenuExpanded: { expanded: false }
并将切换更改为:
this.toggleProperty('isMenuExpanded.expanded');
每次更新时,ApplicationController中的操作都会正确地将isMenuExpanded.expanded值打印到控制台。
提前感谢您的时间和专业知识!
答案 0 :(得分:0)
尝试将其设置为计算属性。
App.ApplicationController = Ember.Controller.extend({
needs: ['sort'],
isMenuExpanded: Ember.computed.alias('controllers.sort.isMenuExpanded'),
actions: {
appClicked: function () {
console.log(this.get('isMenuExpanded'));
}
}
});
App.SortController = Ember.Controller.extend({
isMenuExpanded: false,
actions: {
menuClicked: function () {
this.toggleProperty('isMenuExpanded');
}
}
})