2016-03-22 14 views
9

पर भेजे गए ऑब्जेक्ट में खाते के लिए 'आईडी' शामिल करना होगा, मैं एम्बर के लिए नया हूं और मुझे अपनी समस्या का हल कहीं भी नहीं मिल रहा है। मैंने यहां स्टैक और अन्य एम्बर मंचों में प्रश्नों को पढ़ा है, लेकिन उनमें से कोई भी मेरे लिए काम नहीं करता है।दावा विफल: आपको 'push' ember.js v-2.4

मैं एक सरल साइनअप फॉर्म बनाने की कोशिश कर रहा हूं। मुझे ध्यान रखना चाहिए कि बैकएंड के लिए मैं django का उपयोग करता हूं। यहाँ मेरी कोड है:

सर्वर प्रतिक्रिया:

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

एंबर मॉडल:

import DS from 'ember-data'; 

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

एंबर एडाप्टर: 'एंबर-डेटा' से आयात डी एस;

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

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

एंबर Serializer:

import DS from 'ember-data'; 

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

एंबर रूट: 'एंबर' से आयात एंबर;

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

एंबर नियंत्रक:

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

    } 
    } 
}); 
इस कार्यान्वयन के साथ

मैं ऊपर उल्लिखित त्रुटि मिलती है। किसी भी सहायता की सराहना की जाएगी। पहले ही, आपका बहुत धन्यवाद।

उत्तर

12

आपका बैकएंड एक आईडी के साथ जवाब देना चाहिए, यानी

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

आप वास्तव में serializer उपयोग करने के लिए जब तक आप एक विशेष क्षेत्र एक आईडी के रूप में कार्य करना चाहते हैं की जरूरत नहीं है। ऊपर के उदाहरण में तो, एंबर-डेटा अपने बैकएंड

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

वापस जाने के लिए उम्मीद करेंगे या आप कुछ इस तरह कर सकता है:

import DS from 'ember-data'; 

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

और एक आईडी के रूप में अपने उपयोगकर्ता नाम का उपयोग करें।

+0

धन्यवाद आपका जवाब इगोर के लिए एक बहुत, मैं सिर्फ क्या सर्वर एक आईडी के रूप में उपयोग कर रहा था समझ नहीं सकता है। – Jack

3

मैंने अपनी त्रुटि तय की। समस्या यह थी कि बैकएंड उपयोगकर्ता नाम का उपयोग आईडी के रूप में कर रहा था ताकि एम्बर इसे पहचाना न सके।

एंबर Serializer के लिए निश्चित कोड है:

import DS from 'ember-data'; 

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