javascript - Ako aktualizovať obsah jedného ArrayController z vybranej hodnoty iného ArrayController v Ember.js


Mám nasledujúci problém v ember.js. Detský kontrolér závisí od vybranej hodnoty v rodičovskom kontroléri, aby mohol určiť svoj obsah. V databáze má dieťa odkaz 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
});

Radšej by som to vyriešil bez toho, aby parentsController musel čokoľvek vedieť o ostatných kontroléroch. Malo by to byť možné pomocou pozorovateľov, väzieb alebo dokonca výpočtov, ale nemám ani potuchy, kde začať. Akákoľvek pomoc by bola veľmi oceniteľná.

Odpoveď č. 1

Môžete použiť väzobný systém. sonsController potrebuje sledovať vlastnosť parentsController.selected a potom aktualizovať svoj obsah.

Tu je príklad, ako to môžete urobiť:

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

A tu je priradený jsfiddle.

Poznámka: môžete tiež priamo viazať vybranú vlastnosť:

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

    updateContent: function() {
       ...
    }.observes('parentSelected')
})