किसी बहुरूपी संघों और एंबर-डेटा के लिए एक जवाब के साथ आ गया है?एंबर-डेटा बहुरूपी संघों
हम मैं क्या बता सकता से संबंध के दूसरे छोर पर प्रकार क्वेरी करने के लिए सक्षम होने का किसी तरह की आवश्यकता होगी।
किसी ने इस पर कोई विचार?
किसी बहुरूपी संघों और एंबर-डेटा के लिए एक जवाब के साथ आ गया है?एंबर-डेटा बहुरूपी संघों
हम मैं क्या बता सकता से संबंध के दूसरे छोर पर प्रकार क्वेरी करने के लिए सक्षम होने का किसी तरह की आवश्यकता होगी।
किसी ने इस पर कोई विचार?
तो मैं कुछ है। यह खत्म नहीं हुआ है, या पूरी तरह से साफ है, लेकिन यह काम करता है। असल में, मैं पूरी तरह से एम्बर संघों को बाईपास करने के लिए एक मिश्रण का उपयोग करता हूं। मुझे यकीन है कि इसे एडाप्टर या स्टोर में घुमाया जा सकता है, लेकिन अभी यह काम करता है।
बहुरूपी मॉडल एक Itemid और itemtype साथ JSON के माध्यम से आते हैं:
App.Follow = DS.Model.extend
user: DS.belongsTo('App.User')
itemId: DS.attr("number")
itemType: DS.attr("string")
मैं मॉडल है कि यह साथ जुड़े रहे हैं करने के लिए एक mixin जोड़ें:
App.Hashtag = DS.Model.extend App.Polymorphicable,
follows:(->
name: DS.attr("string")
@polymorphicFilter(App.Follow, "Hashtag")
).property('changeCount') #changeCount gives us something to bind to
followers: (->
@get('follows').map((item)->item.get('user'))
).property('follows')
mixin तीन तरीकों को लागू करता है, एक जो चेंज काउंटर अपडेट करता है, जो मॉडल के प्रकार और पॉलीमोर्फिकफिल्टर विधि को देता है जो आइटम टाइप और आईडी द्वारा मॉडल फ़िल्टर करता है:
App.Polymorphicable = Ember.Mixin.create
changeCount: 1
polymorphicFilter: (model, itemType)->
App.store.filter model,
(data) =>
if data.get('itemId')
@get('id') is data.get('itemId').toString() and data.get('itemType') is itemType
itemType:()->
@constructor.toString().split('.')[1]
updatePolymorphicRelationships:()->
@incrementProperty('changeCount')
नियंत्रक परत यह सब jankyness से सुरक्षित है, सुनिश्चित करें कि बाइंडिंग आग बनाने के लिए updatePolymorphicRelationship कॉल करने के लिए होने के लिए छोड़कर:
App.HashtagController = Ember.ObjectController.extend
follow:()->
App.Follow.createRecord({
user: @get('currentUserController.content')
itemId: @get('id')
itemType: @get('content').itemType()
})
#this provides a way to bind and update. Could be refactored into a didSave()
#callback on the polymorphic model.
@get('content').updatePolymorphicRelationships()
App.store.commit()
है यही कारण है कि मैं अब तक की है। मैं चीजों को मॉडल परत में रखने की कोशिश कर रहा हूं क्योंकि यह एडाप्टर परत से केवल एक कदम हटा दिया गया है। अगर ऐसा लगता है कि एम्बर डेटा भविष्य में पॉलिमॉर्फिक्स को देखने के लिए नहीं जा रहा है, तो यह सब एक उच्च स्तर तक खींचने के लिए समझ में आता है, लेकिन अभी के लिए, यह मेरे नियंत्रकों (अपेक्षाकृत) साफ करता है और छोड़ देता है।
बहुरूपी संघों अब एंबर डेटा में समर्थित हैं
https://github.com/emberjs/data/commit/e4f7c3707217c6ccc0453deee9ecb34bd65c28b9
निर्माण अब आप बहुरूपी संघों का उपयोग कर सकते हैं:
आप इसे बहुरूपी बनाने के लिए अपने मॉडल विन्यस्त करने की जरूरत:
/* polymorphic hasMany */
App.User = DS.Model.extend({
messages: DS.hasMany(App.Message, {polymorphic: true})
});
App.Message = DS.Model.extend({
created_at: DS.attr('date'),
user: DS.belongsTo(App.User)
});
App.Post = App.Message.extend({
title: DS.attr('string')
});
/* polymorphic belongsTo */
App.Comment = App.Message.extend({
body: DS.attr('string'),
message: DS.belongsTo(App.Message, {polymorphic: true})
});
आप भी अपनीपर alias
गुण विन्यस्त करने की जरूरत
DS.RESTAdapter.configure('App.Post' {
alias: 'post'
});
DS.RESTAdapter.configure('App.Comment' {
alias: 'comment'
});
परिणाम आपके सर्वर से उम्मीद इस तरह होना चाहिए:
{
user: {
id: 3,
// For a polymorphic hasMany
messages: [
{id: 1, type: "post"},
{id: 1, type: "comment"}
]
},
comment: {
id: 1,
// For a polymorphic belongsTo
message_id: 1,
message_type: "post"
}
}
अधिक this github thread
जब किसी मॉडल में एकाधिक पॉलीमोर्फिक एसोसिएशन होते हैं तो मैंने एक समस्या में भाग लिया है - एक पोस्ट टिप्पणी योग्य, अटैचमेंट और नोटिफ़ाइबल हो सकता है - क्या आप पहले उस समस्या में भाग चुके हैं?मैंने अपने "पॉलिमॉर्फिक" मॉडल को अंतिम से विस्तारित करके आंशिक रूप से इसके आसपास काम किया है, लेकिन इसका मतलब है कि मेरे पास प्रत्येक मॉडल पर कौन से गुण दिखाई नहीं देते हैं, इसका कोई नियंत्रण नहीं है। –
'हैनी' ने किसी आईडी को {{id: 1, टाइप: 'टाइप'} 'ऑब्जेक्ट के साथ बदल दिया है, जबकि एक संबंधित है, इसे मूल ऑब्जेक्ट में इंजेक्ट करता है? यदि वे वही थे, तो यह बहुत साफ होगा, उदा। 'टिप्पणी: {आईडी: 1, संदेश: {आईडी: 1, टाइप: 'पोस्ट'}}' – Joe
तुम क्या आप क्या करना चाहते का एक विशिष्ट उदाहरण दे सकते हैं में जानकारी? – pangratz
मैं कुछ ऐसा करने में सक्षम होना चाहता हूं: JSON: {... "attachTo": {"user_id": 16} ...} और मॉडल परिभाषा में: संलग्न करने के लिए: DS.belongsTo ("ऑटो") –