2016-02-25 10 views
10

È possibile accedere al modello del percorso all'interno dell'azione del percorso?Ember - Come ottenere il modello del percorso all'interno dell'azione del percorso

sto passando più oggetti all'interno di un modello di percorso di modello,

model: function() { 
    return { 
     employeeList : this.store.findAll("employee"), 
     employee : Ember.Object.create() 
    } 
} 

Dall'azione percorso che sto voler modificare il model.employee percorso. Ho provato quanto segue, ma non riesco a ottenere l'oggetto.

actions:{ 
    editAction : function(id) { 
     var emp = this.get("model"); 
     console.log(emp.employee); 

    } 
} 

Qualcuno può dare una soluzione per ottenere e modificare oggetto modello (dipendente)?

+2

'emp.get ('dipendente');' e il dipendente non è un'istanza del modello dipendente, se si desidera utilizzare un modello di impiegato vuoto 'this.store.createRecord ('impiegato', {}); –

+0

Ho provato emp.get ('dipendente'), ma sto dando TypeError: emp.get non è una funzione –

+1

Miguel ha coperto tutto ciò che doveva essere coperto ^^ –

risposta

25

Il primo problema è che è necessario restituire una promessa dal gancio del modello. In questo modo, la transizione attenderà la promessa di Resolve. return { /*...*/}; restituisce un oggetto e non una promessa, anche se l'oggetto stesso contiene promesse. La soluzione è quella di utilizzare come Ember.RSVP.hash:

model() { 
    return Ember.RSVP.hash({ 
    employeeList: this.store.findAll('employee'), 
    employee: Ember.Object.create() 
    }); 
} 

Ciò restituirà una promessa che si risolve quando all interno promesse determinazione.


Il secondo problema è che non è possibile utilizzare this.get('model') in un percorso. Se ci pensi, la proprietà model è l'hook stesso e non il modello risolto. Soluzioni:

  1. Questa azione viene inviata dal controller/modello. Non puoi passare il modello come parametro? In questo modo è possibile accedere al modello tramite gli argomenti della funzione.
  2. Se assolutamente necessario, this.modelFor(this.routeName); restituisce il modello per il percorso corrente.
  3. È possibile accedere al modello nel percorso attraverso il controller come this.controller.get('model').
  4. È inoltre possibile implementare il gancio setupController e accedere al modello. È quindi possibile fare cose come this.set('employeeModel', model); per l'accesso successivo.
+0

Grazie a miguelcobain. Ha funzionato. –

Problemi correlati