2012-05-19 21 views
5

की 'नक्शा' कॉल नहीं कर सकता जब मैं emberjs + एंबर डेटा के साथ रेल db से डेटा लोड करने मैं यह त्रुटिEmberjs + डेटा + रेल - Uncaught TypeError: विधि अपरिभाषित

Uncaught TypeError: Cannot call method 'map' of undefined

यहाँ हो रही है coffescript है कोशिश कर रहा हूँ कोड:

window.Cosmetics = Ember.Application.create 

Cosmetics.store = DS.Store.create 
    revision: 4 
    adapter: DS.RESTAdapter.create 
    bulkCommit: false 

Cosmetics.admin_user = DS.Model.extend({ 
    name: DS.attr('string') 
    email: DS.attr('string') 
}); 

Cosmetics.view = Ember.View.extend 
    templateName: 'ember/views/aaa' 

Cosmetics.admin_user.reopenClass 
    url: 'admin/user' 

Cosmetics.store.findAll(Cosmetics.admin_user) 

नियंत्रक उचित JSON डेटा प्राप्त करता है। मैंने इंटरनेट पर पाए गए उदाहरणों से कोड मैप करने का प्रयास किया है लेकिन कुछ भी मदद नहीं की है। कोई विचार? मुझे लगता है मैं sth गलत कर रहा हूँ। किसी भी सहायता के लिए अग्रिम रूप से धन्यवाद।

+0

क्या आप सर्वर से वापस आने वाले ऑब्जेक्ट का उदाहरण पोस्ट कर सकते हैं? एम्बर के पुराने संस्करणों और डेटा के नए संस्करणों के साथ एक बग भी था जो उपर्युक्त त्रुटि को ट्रिगर करेगा, आप किस प्रकार का एम्बर का उपयोग कर रहे हैं? –

+0

@CoryLoken यहां रेल द्वारा लौटाई गई नमूना वस्तु है - [ऑब्जेक्ट लौटा] (http://pastebin.com/Ttp09BAa)। एम्बरज संस्करण के बारे में, मैं एम्बर-रेल मणि के साथ भेजे गए एक का उपयोग कर रहा हूं, फिर भी एक सुरक्षित पक्ष पर रहने के लिए मैंने जिथब (0.9.7.1) से डाउनलोड किए गए ** नवीनतम ** का उपयोग करने की कोशिश की है लेकिन सफलता के बिना। – thyforhtian

+0

एम्बर-रेल के साथ पैक किए गए एम्बरजेज़ संस्करण के साथ एक ही समस्या है 0.6.0 –

उत्तर

3

एंबर-डेटा की उम्मीद findAll परिणाम मॉडल के बहुवचन रूप अंतर्गत नेस्टेड जा करने के लिए:

क्या एंबर-डेटा उम्मीद कर रही है:

{ 
    "users": [ 
     { 
      "activated": null, 
      "created_at": "2012-05-14T19:35:44Z", 
      "email": "[email protected]", 
      "id": 1, 
      "name": "john doe", 
      "updated_at": "2012-05-15T20:23:06Z" 
     } 
    ] 
} 

क्या यह आपके उदाहरण में हो रही है:

[ 
    { 
     "activated": null, 
     "created_at": "2012-05-14T19:35:44Z", 
     "email": "[email protected]", 
     "id": 1, 
     "name": "john doe", 
     "updated_at": "2012-05-15T20:23:06Z" 
    } 
] 

विशेष रूप से, त्रुटि जेएसओएन प्रतिक्रिया लेने और "उपयोगकर्ता" कुंजी के तहत सबकुछ पर "मानचित्र" चलाने में त्रुटि से आती है, जो आपके मामले में मौजूद नहीं है, इसलिए "मानचित्र" हो रहा है "अपरिभाषित" पर बुलाया।

+1

मुझे डर है कि यह ऐसा नहीं है। मैंने कोशिश की है कि नेस्टेड प्रतिक्रिया प्राप्त करने के लिए नियंत्रक में 'answer_with'' प्रतीक को 'user_with'' जोड़कर, लेकिन फिर भी वही त्रुटि। यह 'ids = hashes.map (फ़ंक्शन (हैश) {...}' पर ember-data-latest.js में तोड़ता रहता है। – thyforhtian

3

मुझे एक ही समस्या थी। मेरे नियंत्रक में index कार्रवाई में जेएसओएन को प्रस्तुत करते समय मेरे लिए यह हल हो गया था कि रूट नोड जोड़ रहा था।

format.json { render json: @things } 
इस के लिए

:

format.json { render json: { things: @things }} 

ऐसा इसलिए है क्योंकि एंबर-डेटा JSON वस्तु में रूट नोड आवश्यकता है, लेकिन रेल डिफ़ॉल्ट रूप से यह शामिल नहीं है कि मतलब इस लाइन को बदलने।

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

यह @tvon का सुझाव दिया गया है या नहीं। ऐसा लगता है कि यह समस्या है लेकिन रूट नोड जोड़ना मदद नहीं करता है (दुर्भाग्य से)। वैसे भी धन्यवाद। – thyforhtian

+0

यह बहुत अजीब है। क्या आपने इसे डिबग करने का प्रयास किया है? आप सुनिश्चित हैं कि आप नवीनतम संस्करण के साथ हैं? –

+0

मुझे इसी तरह की स्थिति में मदद मिली - धन्यवाद! – novemberkilo

0

मुझे अंततः समाधान मिला है!

मुझे यकीन नहीं है कि यह इस तरह से किया जाना चाहिए, लेकिन यह थोक काम से छुटकारा पाने के लिए पर्याप्त था। तो क्या दुकान की तरह दिखना चाहिए है:

Cosmetics.store = DS.Store.create 
    revision: 4 
    adapter: DS.RESTAdapter.create 

bulkCommit: falseUncaught TypeError: Cannot call method 'map' of undefined त्रुटि उत्पन्न कर रहा था।

यह समस्या केवल रेल ऐप्स में उपयोग किए जाने पर एम्बर-डेटा से संबंधित प्रतीत होती है।

मुझे लगता है कि थोड़ा सा है जो समस्या को हल करने के लिए प्रतीत होता है, किसी और के कारण होता है;

3

समस्या मिली, समाधान के बारे में निश्चित नहीं है।

अपने संसाधन एक namespace के तहत कार्य किया जा रहा है, जैसे

App.Event = DS.Model.extend({ 
    name: DS.attr('string'), 
}); 

App.Event.reopenClass({ 
    url: 'api/event' 
}) 

एंबर डेटा JSON प्रतिक्रिया को पार्स करता है, यह findAll में json[plural] की तरह कुछ जो json['events'] होना चाहिए, हालांकि बहुवचन होने की गणना की जाती है करता है json['api/events'], और इसलिए त्रुटि।मैं इसके बारे में पूछूंगा और शायद इसके लिए टिकट बढ़ाऊंगा।

अद्यतन

मैं इस here

वर्कअराउंड

हैक के रूप में के लिए एक टिकट बनाने के बाद, मैं यह कर रहा हूँ:

def index 
    respond_to do |format| 
    format.json { render json: { 'api/events': Event.all } } 
    end 
end 
0

जड़ समस्या का कारणमें कार्य को बहुवचन करना हैइसलिए समाधान इसे ठीक करना है;)

DS.RESTAdapter.reopenClass({ 
    pluralize: function(name) { 
     if (!this.plurals[name]) 
     name = name.substring(name.lastIndexOf('/')+1); 

     return this.plurals[name] || name + "s"; 
    } 
    }); 
संबंधित मुद्दे