2015-01-20 11 views
7

W jaki sposób można uzyskać dostęp do modelu z poziomu kontrolera? Obecnie użycie poniższego kodu zwraca "niezdefiniowany nie jest funkcją" (patrz rysunek JS nie powiedzie się ...).Model dostępu do embera wewnątrz kontrolera

modele/plan.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name:  DS.attr('string'), 
    period:  DS.attr('number'), 
    price:  DS.attr('number'), 
}); 

szlaki/checkout.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 

    model: function(params) { 
     return this.store.find('plan', params.plan_id); 
    } 
}); 

kontrolery/checkout.js

import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    submitPayment: function(error, result) 
    { 
      var plan = this.get('model'); 
    } 
} 

router.js

Router.map(function() { 
    this.route('checkout', {path: '/checkout/:plan_id'}); 
}); 
+0

może „to” nie jest kontrolerem w „submitPayment”. Czy submitPayment to działanie? Jeśli tak, powinieneś umieścić go wewnątrz obiektu akcji. Lub sprawdzić typowe, czy model jest pobierany w haku modelu? – blessenm

+0

submitPayment jest po prostu funkcją wywoływaną z poziomu akcji. Tak, model jest przechowywany, bez problemów. –

+1

Zamiast rozszerzania "Ember.Controller", spróbuj "Ember.ObjectController". – blessenm

Odpowiedz

8

ja zorientowaliśmy się ostatecznie. plan = this.get('model') działa dla akcji. Zwraca model, a właściwości są dostępne z plan.get('price'). Nie jest idealny, ale wykonuje swoją robotę. Dlaczego to nie zadziałało, ponieważ znajdowało się wewnątrz funkcji, która została wywołana jako wywołanie zwrotne z wewnątrz działania. Prawdopodobnie więc zakres "tego" nie został również przeprowadzony do funkcji wywołania zwrotnego. Przeniosłem funkcję zwrotną jako wewnętrzną funkcję wewnątrz akcji, wtedy "ten" zakres zadziałał.

chodzi o zakres problemu, oto rozwiązanie setting an application controller variable to results returned from AJAX call

+0

Nie mogę używać this.get () wewnątrz kontrolera. Ex: eksportuj domyślny plik Ember.Controller.extend ({ model: this.get ("model"), wiadomość: this.model.message, .... – Vaibhav

+2

Wyobraź to. Działa to tak w kontroler: wiadomość: Ember.computed.alias ("model.message"), ... – Vaibhav

Powiązane problemy