2014-04-24 18 views
8

Forse fare questo con un'applicazione Ember regolare avendo tutto il codice seduto in app.js sarebbe stato molto più facile per me. Ma dal momento che sto usando la CLI di Ember, ho problemi ad accedere al mio modello nella mia rotta. Sto ancora cercando di imparare come usare la CLI di Ember quindi ti prego di darmi una mano.Come accedere a Ember Model dalla Route in Ember CLI

Poiché desidero attivare le chiamate AJAX e ottenere i dati da rendere sulla mia interfaccia utente, ho scaricato e aggiunto la libreria del modello Ember al mio progetto. Non vedo la necessità di usare i dati di rame. Questa è la documentazione del modello di Ember a cui mi riferisco: https://github.com/ebryn/ember-model#example-usage. Detto questo, ecco la mia struttura di directory che Ember CLI proposto:

|-app  
    |-controllers 
    | |-customers.js 
    |-models  
    | |-customers.js 
    |-routes  
    | |-customers.js 
    |-templates  
    | |-customers.hbs 
    |-app.js 
    |-index.html 
    |-main.js 
    |-router.js 

Questa è la rappresentazione più semplice della struttura del progetto vero e proprio che ho appena mettere a fuoco il problema. Come proposto nella documentazione Ember modello I aggiunto seguente codice per il mio modello Clienti (modello \ customers.js):

export default Ember.Model.extend({ 
    nameid: attr(), 
    firstname: attr(), 
    middlename: attr(), 
    lastname: attr(),   
    prefixname: attr(), 
    suffixname: attr() 
}); 

this.url = "http://restapi/api/customers"; 
this.adapter = Ember.RESTAdapter.create(); 

Si noti che ho dovuto fare il "default esportazione" al posto di "App.Customers = Ember.Model .estendere...". Questa è la convenzione di Ember CLI. Così, quando provo ad accedere al modello ho creato nei miei clienti Itinerario ottengo l'errore "Errore durante il caricamento di percorso: ReferenceError: App non è definito" ..

clienti codice Percorso:

export default Ember.Route.extend({ 
    model: function() { 
     App.Customers.find(); 
    }, 

    actions: { 
     addnew: function(){ 
      //logic of saving edited customer 
      alert('customer created!'); 
     } 
    } 
}); 

Ho provato questo .model() - Restituisce un oggetto di tipo supperWrapper e this.modelFor() - Restituisce null.

Si prega di suggerire come ottenere un handle del mio modello nel suo percorso in modo da poter eseguire le operazioni CRUD fornite immediatamente da Ember Model.

Grazie!

risposta

16

Ti suggerisco di cambiare il nome del file del modello in singolare, ad es. customer.js.

Se si desidera accedere alla classe del modello all'interno del file di percorso, è necessario importare il modello. Poiché Ember CLI utilizza la sintassi del modulo ES6, non è possibile/non deve accedere a qualcosa direttamente sull'oggetto App. Questo dovrebbe essere fatto tramite istruzioni di importazione o Ember internamente tramite il resolver.

import Customer from "../models/customer"; 

Ora è possibile utilizzarlo nel gancio modello. C'è anche un altro errore nel tuo codice di esempio, devi restituire la promessa dalla chiamata di ricerca.

model: function() { 
    return Customer.find(); 
}, 

Sono curioso di sapere perchè hai scelto Ember modello su Ember dati, perché per questo esempio si avrebbe bisogno di meno codice con Ember dati e sarebbe più come l'Ember modo per quanto ne so.

+0

Grazie per la tua rapida risposta! È sistemato! Fare piccoli passi per imparare come lavorare con la CLI di Ember. Il motivo per cui ho scelto Ember Model su Ember Data è perché avevo bisogno di uno strato leggero (livello di accesso ai dati) senza persistenza. E sii onesto, è stato parzialmente anche a causa di tutta la presunta instabilità di Ember Data. – Vinay

Problemi correlati