2014-04-24 6 views
8

Vielleicht wäre es für mich einfacher gewesen, dies mit einer normalen Ember-Anwendung zu tun, bei der der gesamte Code in app.js enthalten wäre. Aber da ich Ember CLI verwende, habe ich Probleme beim Zugriff auf mein Modell in meiner Route. Ich versuche immer noch zu lernen, wie man Ember CLI benutzt, also bitte hilf mir.Zugriff auf das Ember-Modell von der Route in Ember CLI

Da ich nur AJAX-Aufrufe auslösen und die Daten auf meiner Benutzeroberfläche rendern möchte, habe ich heruntergeladen und Ember Model Bibliothek zu meinem Projekt hinzugefügt. Ich sehe keine Notwendigkeit, Ember Data zu verwenden. Dies ist die Ember Model Dokumentation, auf die ich mich beziehe: https://github.com/ebryn/ember-model#example-usage. Mit dieser sagte, hier ist meine Verzeichnisstruktur, die Ember CLI vorgeschlagen:

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

Dies ist viel einfache Darstellung der tatsächlichen Projektstruktur, die ich gerade auf dem Problem zu konzentrieren. Wie in Ember Modell Dokumentation vorgeschlagen habe ich zu meinem Kunden-Modell (Modell \ customers.js) folgenden Code ein:

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(); 

Beachten Sie, dass ich die „Export default“ anstelle von „App.Customers = Ember.Model zu tun hatte .erweitern...". Dies ist die Ember-CLI-Konvention. Also, wenn ich versuche, das Modell, das ich in meinen Kunden erstellt zugreifen Route I erhalten Fehler "Fehler beim Laden Route: Reference: App ist nicht definiert" ..

Kunden Leitungswegcode:

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

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

habe ich versucht, diese .model() - Gibt ein Objekt vom Typ SupperWrapper und this.modelFor() zurück - Gibt null zurück.

Bitte schlagen Sie vor, wie Sie ein Modell meines Modells auf seiner Route bekommen, damit ich CRUD-Operationen durchführen kann, die von Ember Model bereitgestellt werden.

Danke!

Antwort

16

Ich schlage vor, dass Sie den Dateinamen des Modells in singular z. .

Wenn Sie innerhalb der Routendatei auf die Modellklasse zugreifen möchten, müssen Sie das Modell importieren. Da die Ember-CLI die ES6-Modul-Syntax verwendet, können/sollten Sie nicht direkt auf das Objekt App zugreifen. Dies sollte über Importanweisungen oder Ember intern über den Resolver erfolgen.

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

Jetzt können Sie es im Modell Hook verwenden. Es gibt noch einen weiteren Fehler in Ihrem Beispielcode, Sie müssen das Versprechen aus dem Suchaufruf zurückgeben.

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

Ich bin neugierig, warum Sie Ember Modell über Ember Daten ausgewählt, da für dieses Beispiel, das Sie weniger Code mit Ember Daten benötigen würde und es wäre wie der Ember Weg AFAIK mehr sein.

+0

Vielen Dank für Ihre schnelle Antwort! Es ist repariert! Mit kleinen Schritten lernen, wie man mit Ember CLI arbeitet. Der Grund, warum ich Ember Model über Ember Data ausgewählt habe, ist, dass ich eine leichte Schicht (Datenzugriffsschicht) ohne Persistenz brauchte. Und sei ehrlich, es war teilweise auch wegen der angeblichen Instabilität von Ember Data. – Vinay