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 に答える