2016-02-25 19 views
10

Czy można uzyskać dostęp do modelu trasy w ramach akcji trasy?Ember - Jak uzyskać model trasy wewnątrz trasy

ja przechodząc wiele obiektów wewnątrz modelu trasy do szablonu,

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

z działaniem trasy Ja chce zmodyfikować model.employee trasy. Próbowałem następujące, ale nie otrzymuję obiektu.

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

    } 
} 

Czy ktoś może dać rozwiązanie, aby uzyskać i zmodyfikować obiekt modelu (pracownika)?

+2

'emp.get ('employee');' a twój pracownik nie jest instancją modelu pracownika, jeśli chcesz, aby pusty model pracownika używał 'this.store.createRecord ('employee', {}); ' –

+0

Próbowałem emp.get (" pracownik "), ale daje TypeError: emp.get nie jest funkcją –

+1

Miguel obejmuje wszystko, co musi być pokryte ^^ –

Odpowiedz

25

Pierwszy problem polega na tym, że powinieneś zwrócić obietnicę z haka modelu. W ten sposób przejście czeka na spełnienie obietnicy. return { /*...*/}; zwraca obiekt, a nie obietnicę, nawet jeśli sam obiekt zawiera obietnice. Rozwiązaniem jest użycie Ember.RSVP.hash jak:

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

będzie to powrót obietnicę że rozwiązuje gdy wszystkie obietnice wewnętrzną determinację.


Drugim problemem jest to, że nie można używać this.get('model') w trasie. Jeśli się nad tym zastanowisz, właściwość model to sam hak, a nie model rozwiązany. Rozwiązania:

  1. To działanie jest wysyłane ze sterownika/szablonu. Nie możesz przekazać modelu jako parametru? W ten sposób można uzyskać dostęp do modelu za pośrednictwem argumentów funkcji.
  2. Jeśli absolutnie potrzebujesz, this.modelFor(this.routeName); zwraca model dla bieżącej trasy.
  3. Możesz uzyskać dostęp do modelu na trasie za pomocą kontrolera, takiego jak this.controller.get('model').
  4. Można również zaimplementować hak setupController i uzyskać dostęp do modelu. Następnie możesz zrobić takie rzeczy, jak this.set('employeeModel', model);, aby uzyskać późniejszy dostęp.
+0

Dzięki miguelcobain. Zadziałało. –