我有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()
}
});
当我打电话fetch
的JobSummarySnapshot
对象上,它得到的一切......除非我通过summaryList
集合,他们都是类型object
而不是JobSummary
。
我想这是有道理的,因为除了defaults
对象外,它不知道summaryList
应该是JobSummaryList
类型。我可以通过每个项目并将其转换为JobSummary
对象,但我希望有一种方法可以做到而不必手动完成。
这里是我的测试代码(工作jsfiddle here):
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
});
UPDATE: 它发生,我认为我可以覆盖的解析功能,并设置它的方式......我现在有这样的:
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});
}
});
此功能到目前为止。如果有人对此发表评论,请留下问题......
非常感谢你。我今天只读了一半的东西,再一次,它咬了我一口。它在文档中清楚地表明,正如你在上面提到的那样,你从解析函数返回obj ......但是我不知怎的错过了。再次感谢。 –
爱'set'例子! – Bart