2015-01-20 8 views
7

Come si può accedere a un modello da un controller? Attualmente utilizzando il codice seguente viene restituito un "indefinito non è una funzione" (vai alla figura JS fallire ...).Ember modello di accesso all'interno di un controller

modelli/plan.js

import DS from 'ember-data'; 

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

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

forse 'questo' non è il controllore in 'submitPayment'. SubmitPayment è un'azione? Se è così, dovresti metterlo in un oggetto azioni. Oppure controlla i soliti, il modello viene recuperato nel gancio del modello? – blessenm

+0

submitPayment è solo una funzione chiamata all'interno di un'azione. Sì, il modello è in fase di memorizzazione, nessun problema lì. –

+1

Invece di estendere 'Ember.Controller', prova 'Ember.ObjectController'. – blessenm

risposta

8

ho capito finalmente. plan = this.get('model') funziona per l'azione. Restituisce il modello e le proprietà sono accessibili con plan.get('price'). Non ideale, ma ha il compito. Perché non ha funzionato è perché si trovava all'interno di una funzione che è stata chiamata come callback dall'interno dell'azione. Quindi probabilmente lo scopo di "questo" non è stato eseguito anche per la funzione di callback. Ho spostato la funzione di callback come una funzione interna all'interno dell'azione, quindi ha funzionato "questo" ambito.

Per quanto riguarda il problema ambito, ecco la soluzione setting an application controller variable to results returned from AJAX call

+0

Non sono in grado di usare this.get () all'interno di un controller. Es: export default Ember.Controller.extend ({ modello: this.get ('modello'), messaggio: this.model.message, .... .. – Vaibhav

+2

Calcolato. Funziona così in un controller: messaggio: Ember.computed.alias ('model.message'), ... – Vaibhav