在我的应用程序中,我有以下JSON数据格式:
{
Item: {
property1: '',
...
}
}
根据this stackoverflow.com回答的解决方案,我按照以下方式对Backbond.js模型进行了建模:
App.Models.Item = Backbone.Model.extend({
});
App.Models.ItemData = Backbone.Model.extend({
defaults: {
'Item': new App.Models.Item
}
});
我现在想从页面上的Backend系统向我的应用程序重新启动数据,加载方式如下:
var item = App.Models.ItemData({
{Item:
{property1: 'data'}
}
});
我现在遇到的问题是item.get('Item')
返回普通的JavaScrip对象而不是Backbone.Model对象,因为默认值会被覆盖。 如何在确保item.get('Item')
是App.Models.Item对象的同时创建Backbone.js对象?
我还读过,如果你嵌套Backbone.Models,你应该使用自定义的getter方法,所以你的应用程序的其余部分不必知道内部数据结构。如果是这样,那么实施这些setter和getter的正确方法是什么?
答案 0 :(得分:2)
您可以覆盖ItemData
模型上的parse
方法。不需要defaults
。如果未传递空模型,则解析方法将初始化空模型:
App.Models.ItemData = Backbone.Model.extend({
parse: function(attrs) {
attrs = attrs || {};
if(!(attrs.Item instanceof App.Models.Item))
attrs.Item = new App.Models.Item(attrs.Item);
return attrs;
}
});
然后使用选项ItemData
初始化您的parse:true
模型:
var item = new App.Models.ItemData({Item:{property1: 'data'}}, {parse:true});