2015-01-20 9 views
7

Wie kann auf ein Modell von einem Controller aus zugegriffen werden? Wenn Sie den unten stehenden Code verwenden, wird der Fehler "undefined is not a function" zurückgegeben (go figure JS fail ...).Ember-Zugriffsmodell in einem Controller

models/plan.js

import DS from 'ember-data'; 

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

Routen/checkout.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 

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

Controller/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

vielleicht 'dies' nicht der Controller in 'submitPayment' ist. Ist submitPayment eine Aktion? Wenn ja, sollten Sie es in ein Aktionsobjekt einfügen. Oder kassieren Sie das Übliche, wird das Modell in den Modellhaken geholt? – blessenm

+0

submitPayment ist nur eine Funktion, die innerhalb einer Aktion aufgerufen wird. Ja, das Modell wird gespeichert, keine Probleme. –

+1

Anstatt "Ember.Controller" zu erweitern, versuchen Sie "Ember.ObjectController". – blessenm

Antwort

8

Ich habe es schließlich herausgefunden. plan = this.get('model') funktioniert für die Aktion. Es gibt das Modell zurück, und die Eigenschaften können mit plan.get('price') erreicht werden. Nicht ideal, aber es erledigt die Arbeit. Warum es nicht funktionierte, liegt daran, dass es sich um eine Funktion handelte, die innerhalb der Aktion als Callback aufgerufen wurde. Wahrscheinlich wurde der Umfang von "this" nicht auch auf die Callback-Funktion angewendet. Ich habe die Callback-Funktion als innere Funktion innerhalb der Aktion verschoben, dann hat "dieser" Bereich funktioniert.

Zum Anwendungsbereich Problem, hier ist die Lösung setting an application controller variable to results returned from AJAX call

+0

Ich bin nicht in der Lage, this.get zu verwenden () in einem Controller. Beispiel: export default Ember.Controller.extend ({ modell: this.get ('model'), nachricht: this.model.message, ... .. – Vaibhav

+2

Es wurde herausgefunden, es funktioniert so in ein Controller: Nachricht: Ember.computed.alias ('model.message'), ... – Vaibhav

Verwandte Themen