मेरे पास 2 मॉडल और एक संग्रह है। JobSummary
एक मॉडल है, JobSummaryList
JobSummary
आइटम का एक संग्रह है, और फिर मैं एक JobSummarySnapshot
मॉडल एक JobSummaryList
जिसमें होती है: जब छोड़करसंग्रह के साथ Backbone.js मॉडल
JobSummary = Backbone.Model.extend({});
JobSummaryList = Backbone.Collection.extend({
model: JobSummary
});
JobSummarySnapshot = Backbone.Model.extend({
url: '/JobSummaryList',
defaults: {
pageNumber: 1,
summaryList: new JobSummaryList()
}
});
जब मैं JobSummarySnapshot
वस्तु पर fetch
कहते हैं, यह हो जाता है सब कुछ ... मैं summaryList
संग्रह के माध्यम से स्थानांतरित करें वे सभी प्रकार object
हैं और JobSummary
नहीं हैं।
मुझे लगता है कि defaults
ऑब्जेक्ट के अलावा यह समझ में आता है, यह नहीं जानता कि summaryList
JobSummaryList
प्रकार का होना चाहिए। मैं प्रत्येक आइटम के माध्यम से जा सकता हूं और इसे JobSummary
ऑब्जेक्ट में बदल सकता हूं, लेकिन मुझे उम्मीद थी कि इसे मैन्युअल रूप से किए बिना इसे करने का कोई तरीका था।
var returnData = {
pageNumber: 3,
summaryList: [
{
id: 5,
name: 'name1'},
{
id: 6,
name: 'name2'}
]
};
var fakeserver = sinon.fakeServer.create();
fakeserver.respondWith('GET', '/JobSummaryList', [200,
{
'Content-Type': 'application/json'},
JSON.stringify(returnData)]);
var callback = sinon.spy();
var summarySnapshot = new JobSummarySnapshot();
summarySnapshot.bind('change', callback);
summarySnapshot.fetch();
fakeserver.respond();
var theReturnedList = callback.getCall(0).args[0].attributes.summaryList;
_.each(theReturnedList, function(item) {
console.log('Original Item: ');
console.log(item instanceof JobSummary); // IS FALSE
var convertedItem = new JobSummary(item);
console.log('converted item: ');
console.log(convertedItem instanceof JobSummary); // IS TRUE
});
अद्यतन:
यहाँ अपने परीक्षण कोड (jsfiddle here काम) है यह मेरे लिए हुआ है कि मैं पार्स समारोह को ओवरराइड और इसे उस तरह से सेट कर सकते हैं ... मैं अब इस राशि:
JobSummarySnapshot = Backbone.Model.extend({
url: '/JobSummaryList',
defaults: {
pageNumber: 1,
summaryList: new JobSummaryList()
},
parse: function(response) {
this.set({pageNumber: response.pageNumber});
var summaryList = new JobSummaryList();
summaryList.add(response.summaryList);
this.set({summaryList: summaryList});
}
});
यह अब तक काम करता है। मामले में किसी को खुला प्रश्न छोड़कर उस पर टिप्पणी ....
आपको बहुत बहुत धन्यवाद विधि सेट() से वापस जाने के लिए भूल गया,। मैं आज केवल आधे पढ़ने की चीजों के दोषी हूं और एक बार फिर, यह मुझे थोड़ा सा है। यह स्पष्ट रूप से दस्तावेज़ों में कहता है कि, जैसा कि आप उपरोक्त उल्लेख करते हैं, आप ओब्जे को पार्स फ़ंक्शन से वापस कर देते हैं .... लेकिन मैंने किसी भी तरह इसे याद किया। एक बार फिर धन्यवाद। –
'सेट' उदाहरण से प्यार करें! – Bart