तो, मैं GitHub पर this pull request पाया। यह 8 महीने पुरानी है, तो उसके बाद से जोड़ा जटिलता के कारण काम नहीं करेगा, लेकिन मैं क्रियान्वित किया है वैकल्पिक हल तो तरह का सुझाव दिया:
App.store = DS.Store.create({
revision: 4,
adapter: DS.RESTAdapter.create({
plurals: {
'cart': 'cart'
}
})
});
App.Cart.reopenClass({
find: function() {
this._super("singleton");
}
});
अपने सर्वर पर (मैं रेल उपयोग कर रहा हूँ), मैं जोड़ने के लिए मेरी मार्गों के लिए निम्न:
get "cart/:ignored" => "carts#show"
तब मैं CartSerializer
के लिए निम्न जोड़ने के लिए (active_model_serializers मणि का प्रयोग करके):
attributes :id
def id
"singleton"
end
यह आवश्यक है, क्योंकि, जाहिरा तौर पर, अगर जेसन प्रतिक्रिया में आईडी इस मामले में खोजने() (singleton
) से अनुरोधित आईडी से मेल नहीं खाती है, तो एम्बर मॉडल में डेटा लोड नहीं करेगा।
अब, यह स्पष्ट रूप से आदर्श समाधान नहीं है, लेकिन जब तक एम्बर-डेटा इसके लिए समर्थन जोड़ता है, ऐसा लगता है कि यह जाने के लिए कम से कम दर्दनाक तरीका है।
वैसे, मैंने समर्थन जोड़ने के लिए an issue दायर किया।
स्रोत
2012-09-22 18:51:42
buildURL फ़ंक्शन को ओवरराइड करना सभी मॉडलों पर लागू होगा, हालांकि, सही? मेरे गैर-एकवचन मॉडल के बारे में क्या? इसके अलावा, भले ही मैं बहुवचन बदलूं, 'ढूंढें() '(तर्क के बिना) वस्तुओं की एक सरणी की अपेक्षा करता है, ताकि यह काम न करे। और यदि मैं खोजने के लिए एक नकली आईडी पास करता हूं, तो मुझे केवल एक आईडी तर्क ('/ cart /: fake_id') को स्वीकार करने के लिए अपने सर्वर मार्गों को संशोधित करना होगा। यह कुछ सामान्य और सरल के लिए बहुत हैकी लगता है। –
बिल्ड यूआरएल ऐसा कुछ कर सकता है: '' if (record.get ('singularResouce') {...} else {this._super.apply (यह, तर्क);} ''। (...) कर सकते हैं अपना खुद का एकवचन निर्माण यूआरएल फ़ंक्शन बनें, और आपके एकवचन मॉडल में 'DS.Model.extend ({singularResouce: true})' ' – Ryan
होगा, आप फिर से' 'buildUrl'' कॉल जैसे कुछ स्नैज़ी भी कर सकते हैं, लेकिन पास आईडी के रूप में अपरिभाषित। – Ryan