Emberjs - 控制器始终从“需求”中获取默认值。调节器

时间:2015-05-13 23:47:58

标签: javascript ember.js

我的情况是我有一个需要的应用程序控制器'从另一个控制器访问属性,如下所示:

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值打印到控制台。

提前感谢您的时间和专业知识!

1 个答案:

答案 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');
        }
    }
})