2014-08-27 2 views
5

Ich versuche, eine App mit Ember.js und glut-Daten unter Verwendung der folgenden Versionen zu erstellen:Fehler bei der Verarbeitung von Streckenfehlern in Ember.js mit glut-Daten

DEBUG: Ember  : 1.7.0 
DEBUG: Ember Data : 1.0.0-beta.9 
DEBUG: Handlebars : 1.2.1 
DEBUG: jQuery  : 2.1.0 

Ich bin mit dem RESTAdapter zum Verbinden mit einer API, die ich mit node.js geschrieben habe.

Sobald ich die App laden ich folgende Fehlermeldung erhalte:

Error while processing route: students undefined is not a function TypeError: undefined is not a function 
    at http://localhost:9000/scripts/vendor/ember-data.js:12006:34 
    at tryCatch (http://localhost:9000/scripts/vendor/ember.js:45818:16) 
    at invokeCallback (http://localhost:9000/scripts/vendor/ember.js:45830:17) 
    at publish (http://localhost:9000/scripts/vendor/ember.js:45801:11) 
    at http://localhost:9000/scripts/vendor/ember.js:29069:9 
    at DeferredActionQueues.invoke (http://localhost:9000/scripts/vendor/ember.js:634:18) 
    at Object.DeferredActionQueues.flush (http://localhost:9000/scripts/vendor/ember.js:684:15) 
    at Object.Backburner.end (http://localhost:9000/scripts/vendor/ember.js:147:27) 
    at Object.Backburner.run (http://localhost:9000/scripts/vendor/ember.js:202:20) 
at apply (http://localhost:9000/scripts/vendor/ember.js:18382:27) 

Hier ist der Code, den ich mit (in der gleichen Reihenfolge geladen ich es geklebt):

App. js

var App = window.App = Ember.Application.create({ 
    LOG_ACTIVE_GENERATION: true, 
    LOG_TRANSITIONS: true, 
    LOG_TRANSITIONS_INTERNAL: false, 
    LOG_VIEW_LOOKUPS: true 
}); 

store.js

App.ApplicationAdapter = DS.RESTAdapter.extend({ 
    host: 'http://localhost:3000', 

    serializer: DS.RESTSerializer.extend({ 
     primaryKey: function(type) { 
      return '_id'; 
     }, 

     serializeId: function(id) { 
      return id.toString(); 
     } 
    }) 
}); 

models/student.js

App.Student = DS.Model.extend({ 
    firstName: DS.attr('string'), 
    lastName: DS.attr('string'), 
    nationality: DS.attr('string'), 
    createdAt: DS.attr('date') 
}); 

Routen/app_route.js

App.StudentsRoute = Ember.Route.extend({ 
    model: function() { 
     return this.store.find('student'); 
    } 
}); 

router.js

App.Router.map(function() { 
    this.resource('students', {path: '/'}); 
}); 

Und die folgende ist die Antwort des API:

{ 
    students: [ 
     { 
      nationality: "Lorem", 
      lastName: "Doe", 
      firstName: "John", 
      _id: "53f87200f3750319b4791235", 
      createdAt: "2014-08-23T10:50:40.661Z" 
     }, 
     { 
      nationality: "Lorem", 
      lastName: "Doe", 
      firstName: "John", 
      _id: "53f87299f3750319b4791234", 
      createdAt: "2014-08-23T10:50:40.661Z" 
     } 
    ] 
} 

Es sieht aus wie der Laden ist nicht die Daten aus der API-Laden, aber das JSON-Datenformat sieht gut aus. Irgendeine Idee von was könnte falsch sein?

Danke!

+0

Ich glaube, ich exakt die gleichen Fehler hatte, die begann, als ich nicht 1.7.0 verwendet wurde, aber 1.8.0 -beta.1 ... zurück zu 1.7.0 zu gehen reparierte es für mich. Nicht sicher, warum Sie das Problem obwohl :( – Leeft

+0

Ich glaube, Sie müssen eine Zeichenfolge in 'primaryKey' statt einer Funktion [basierend auf den Dokumenten] (http://emberjs.com/api/data/classes/DS .RESTSerializer.html # property_primaryKey) Etwas wie 'primaryKey: ''. –

Antwort

3

So mehr auf Stack-Überlauf nach der Suche, ich habe, dass die Serializer nun in einer separaten Klasse sein muss herausgefunden als die RESTAdapter, so dass der Arbeits Code ist folgende:

store.js

App.ApplicationAdapter = DS.RESTAdapter.extend({ 
    host: 'http://localhost:3000' 
}); 

App.ApplicationSerializer = DS.RESTSerializer.extend({ 
    primaryKey: '_id', 
    serializeId: function(id) { 
     return id.toString(); 
    } 
}); 
+0

Für diejenigen, die 'ember-cli' verwenden, sehen Sie sich meine Antwort an. –

0

Ich bekam diesen Fehler, und es hatte nichts mit den üblichen Verdächtigen zu tun.

In coffeescript hatte ich angefangen, ein Modell zu definieren.

App.Cost = DS.Model.extend 
    amount:   DS.attr 'number' 
    active:   DS.attr 'boolean' 

Um ein zweites Modell zu erstellen, I c/p mein erstes Modell und löschte die Attribute:

App.Cost = DS.Model.extend 

Das ging zurück und versuchte, ein scheinbar unzusammenhängenden Modell

localhost:3000/products 
zu laufen

Der Fehler

Error while processing route: products.index 

einfach sicherstellen, dass war mein Modell mit dem Namen korrekt den Fehler behoben:

App.Cost = DS.Model.extend(...) 
App.Price = DS.Model.extend(...) <- instead of repeating the Cost model 

Dies wurde wieder herstellbaren, so dass ich dachte, dass es für andere hilfreich sein könnte.

2

Hier ist eine aktualisierte Antwort für Menschen mit ember-cli.

ember g adapter application #=> creates app/adapters/application.js 
ember g serializer application #=> creates app/serializers/application.js 

In app/adapters/application.js:

import DS from 'ember-data'; 

export default DS.RestAdapter.extend({ 
    host: 'http://localhost:3000' 
}); 

In app/serializers/application.js:

import DS from 'ember-data'; 

export default DS.RESTSerializer.extend({ 
    primaryKey: '_id', 
    serializeId: function(id) { 
    return id.toString(); 
    } 
}); 
Verwandte Themen