2013-09-07 11 views
10

Wydaje się, że w przypadku tras zagnieżdżonych każdy haczyk model każdej linii jest wywoływany przed wywołaniem dowolnego z haków setupController. W jaki sposób dziecko może bezpiecznie dotrzeć do modelu rodzica?W jaki sposób ścieżka podrzędna (lub zasób) może uzyskać dostęp do modelu zasobu nadrzędnego z poziomu przechwytywania modelu?

W moim przypadku modele nie są faktycznie trwałymi obiektami. Są one generowane, w oparciu o parametry, w hakach modelu. Więc nie sądzę, że wydaje mi się, że jest to jedna z najbardziej obiecujących odpowiedzi. Idealnie, model macierzysty powinien być dostępny poprzez ParentController, nie? A może to podejście nie jest zgodne z najlepszymi praktykami?

App.Router.map(function() { 
    this.resource("parent", { path: "parent/:name" }, function() { 
    this.route('child'); 
    }); 
}); 

App.ParentRoute = Ember.Route.extend({ 
    model: function(params) { 
    // build a model here, based on params. 
    // no asynch stuff happening, should be good to go. 
    return { lastName: params.name } 
    }, 

    setupController(controller, model) { 
    controller.set('model', model); 
    } 
}); 

App.ChildRoute = Ember.Route.extend({ 
    model: function(params) { 
    parentModel = this.controllerFor('parent').get('model'); 
    return {lastName: parentModel.get('name') + 'son' }; 

    // parent Model is null 
    // need the parent model HERE, 
    // but I can't get it through the controller yet 
    // as setupController in the parent route hasn't been called yet 
    } 
}); 

Odpowiedz

28

modelFor

Skąd Tęsknię za tym?

App.ChildRoute = Ember.Route.extend({ 
    model: function(params) { 
    parentModel = this.modelFor('parent'); 
    return {lastName: parentModel.get('name') + 'son' }; 
    } 
}); 
+0

Uwielbiam, gdy możesz odpowiedzieć na własne pytanie. –

+7

Dzięki @doublea. Chciałbym dalej wyjaśnić, że argument, który przekazujesz do 'modelFor', jest nazwą trasy macierzystej, której model chcesz. Na przykład. 'user',' user.posts', itd. Oraz [tutaj są dokumenty] (http://emberjs.com/api/classes/Ember.Route.html#method_modelFor). –

+0

Dziękuję bardzo @ steve.hanson, robiłem to z górną walizką wielbłąda, a nie z notacją kropkową !! –

Powiązane problemy