2013-02-05 11 views
37

Ho la seguente struttura percorsoCome accedere a un modello principale all'interno di una rotta di indice nidificata utilizzando ember.js?

App.Router.map(function(match) { 
    this.route("days", { path: "/" }); 
    this.resource("day", { path: "/:day_id" }, function() { 
     this.resource("appointment", { path: "/appointment" }, function() { 
      this.route("edit", { path: "/edit" }); 
     }); 
    }); 
}); 

Quando sono all'interno del AppointmentIndexRoute sto cercando un modo per creare un nuovo modello utilizzando alcune meta giorno dal modello giorno (genitore), ma perché il modello di giorno non so ancora su questo appuntamento Non sono sicuro di come associarli fino a quando l'appuntamento non viene creato/e il commit viene sparato.

Qualsiasi aiuto sarebbe molto apprezzato

risposta

41

Dall'interno 'gancio modello s è possibile utilizzare il modelFor AppointmentIndexRoute (' giorno ') per accedere al modello di genitore. Per esempio:

App.AppointmentIndexRoute = Ember.Route.extend({ 
    model: function(params) { 
    day = this.modelFor("day"); 
    ... 
    } 
}); 

Un altro esempio è qui: emberjs 1.0.0pre4 how do you pass a context object to a resource "...Index" route?

+0

Mi piace quando è così semplice, grazie per la rapida risposta veloce! –

+9

nota che ora (Ember 2.0) devi utilizzare il percorso completo del percorso, quindi sarebbe 'this.modelFor ('days.day')' – andorov

+0

@andorov Mi manca qualcosa? Non sembra che il percorso giornaliero sia annidato sotto i giorni. Sono fratelli. – LukeP

2

E se non sto usando i dati brace? Come faccio a ottenere l'id genitore in un percorso come

this.resource('workspace',function() { 
    this.resource('workflow', {path: '/:workspace_id/workflow'}, function() { 
     this.route('show', {path: '/:workflow_id'}); 
    }); 
    }); 

Questo codice non funziona:

App.WorkflowShowRoute = Em.Route.extend({ 
    model: function(params) { 
     var ws = this.modelFor('workspace'); //ws is undefined 
     return this.store.find('workflow', params.id, ws.id); 
    } 
}); 

EDIT: ho trovato una soluzione, non è l'ideale, ma funziona esattamente il modo in cui lo voglio .

this.resource('workspace',function() { 
    this.route('new'); 
    this.route('show', {path: '/:workspace_id'}); 
    //workflow routes 
    this.resource('workflow', {path: '/'}, function() { 
     this.route('new', {path:'/:workspace_id/workflow/new'}); 
     this.route('show', {path: '/:workspace_id/workflow/:workflow_id'}); 
    }); 
    }); 

E nel mio percorso del flusso di lavoro, posso accedere al jus workspace_id come mi aspetto dalla proprietà params:

App.WorkflowShowRoute = Em.Route.extend({ 
    model: function(params) { 
     return this.store.find('workflow', params.workflow_id, params.workspace_id); 
    } 
}); 

Infine, ecco il mio link-to all'interno del percorso aiutante workspace.show:

{{#each workflow in workflows}} 
    <li> 
    {{#link-to 'workflow.show' this.id workflow.id}}{{workflow.name}}{{/link-to}} 
    </li> 
{{/each}} 
+0

dove stai memorizzando i tuoi dati (se non stai utilizzando l'archivio di dati di ember)? hai una mappa di identità nazionale o qualcosa di equivalente? –

+0

Ho creato il mio negozio utilizzando la tecnica indicata qui http://eviltrout.com/2013/03/23/ember-without-data.html – Emad

Problemi correlati