6

我在 ember.js 中有以下问题。子控制器依赖于父控制器中的选定值来确定其内容。在数据库中,孩子有一个 parent_id 参考。

App.parentsController = Em.ArrayController.create({
    content: [],
    selected: null
});

App.sonsController = Em.ArrayController.create({
    // the value of content depends on the id of
    // the selected item in the parentsController
    content: [], 
    selected: null
});

App.daughtersController = Em.ArrayController.create({
    // the value of content depends on the id of
    // the selected item in the parentsController
    content: [], 
    selected: null
});

我宁愿解决这个问题,而无需 parentsController 了解其他控制器的任何信息。这应该可以通过观察者、绑定甚至通过计算来实现,但我不知道从哪里开始。任何帮助将不胜感激。

4

1 回答 1

6

您可以使用绑定系统。sonsController需要观察parentsController.selected属性,然后更新其内容。

这是一个如何做到这一点的示例:

App.parentsController = Em.ArrayController.create({
    content: [],
    selected: null
});

App.sonsController = Em.ArrayController.create({
    parentControllerBinding: 'App.parentsController',
    content: [], 

    updateContent: function() {
        var selected = this.getPath('parentController.selected');
        var newContent = Ember.A();
        newContent.pushObject(selected);
        this.set('content', newContent);
    }.observes('parentController.selected')
});

是相关的 jsfiddle

注意:您也可以直接绑定选定的属性:

App.sonsController = Em.ArrayController.create({
    parentSelectedBinding: 'App.parentsController.selected',
      ...

    updateContent: function() {
       ...
    }.observes('parentSelected')
})
于 2012-06-06T16:32:50.127 回答