2016-03-22 30 views
9

Sono nuovo in Ember e non riesco a trovare da nessuna parte una soluzione al mio problema. Ho letto le domande qui nello stack e in altri forum di ember, ma nessuno di loro sembra funzionare per me.Asserzione non riuscita: è necessario includere un 'id' per l'account in un oggetto passato a 'push' Ember.js v-2.4

Sto provando a creare un modulo di iscrizione semplice. Devo notare che per il backend uso django. Ecco il mio codice:

Risposta

Server:

[{"username":"user1","password":"123","email":"[email protected]"},   
{"username":"user2","password":"456","email":"[email protected]"}] 

Ember Modello:

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    username: DS.attr(), 
    password: DS.attr(), 
    email: DS.attr() 
}); 

Ember Adapter: DS di importazione da 'tizzone-dati';

export default DS.RESTAdapter.extend({ 
    host: '/api', 
    contentType: 'application/json', 
    dataType: 'json', 

    headers: { 
     username: 'XXXX', 
     password: 'XXXX' 
    } 
}); 

Ember Serializer:

import DS from 'ember-data'; 

export default DS.JSONSerializer.extend({ 
    primaryKey: '_id' 
}); 

Ember Percorso: importazione Ember da 'brace';

export default Ember.Route.extend({ 
    model() { 
     return this.store.findAll('account'); 
    } 
}); 

Ember Controller:

import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    actions: { 

    signup(){ 
     console.log('My username is: ', this.get('username')); 
     console.log('My password is: ', this.get('password')); 
     console.log('My email is: ', this.get('email')); 

     var account = this.store.createRecord('account', { 
       username: this.get('username'), 
       password: this.get('password'), 
       email: this.get('email') 
     }); 

     account.save(); 

    } 
    } 
}); 

Con questa implementazione ottengo l'errore di cui sopra. Qualsiasi aiuto sarebbe apprezzato. Grazie in anticipo.

risposta

12

tuo backend dovrebbe rispondere con un id, cioè

{"id":123,"username":"user1","password":"123","email":"[email protected]"} 

Non avete davvero bisogno di usare il serializzatore, a meno che non si desidera che un campo specifico di agire come un id. Così, nell'esempio di cui sopra, l'Ember-dati ci si aspetta il tuo back-end per tornare

{**"_id":123**,"username":"user1","password":"123","email":"[email protected]"} 

Oppure si potrebbe fare qualcosa di simile:

import DS from 'ember-data'; 

export default DS.JSONSerializer.extend({ 
    primaryKey: 'username' 
}); 

E utilizzare il nome utente come un id.

+0

Grazie mille per la risposta Igor, ho appena non riusciva a capire quello che il server è stato utilizzato come un id. – Jack

3

Ho corretto il mio errore. Il problema era che il backend stava usando il nome utente come id, quindi Ember non poteva riconoscerlo.

Il codice fisso per l'Ember Serializzatore è:

import DS from 'ember-data'; 

export default DS.JSONSerializer.extend({ 
    primaryKey: 'username' 
});