如何初始化嵌套的Backbone.js模型
在我的应用程序中,我有以下JSON数据格式:如何初始化嵌套的Backbone.js模型,backbone.js,Backbone.js,在我的应用程序中,我有以下JSON数据格式: { Item: { property1: '', ... } } 按照stackoverflow.com answer的解决方案,我以以下方式对Backbond.js模型进行建模: App.Models.Item = Backbone.Model.extend({ }); App.Models.ItemData = Backbone.Model.extend({ defaults: {
{
Item: {
property1: '',
...
}
}
按照stackoverflow.com answer的解决方案,我以以下方式对Backbond.js模型进行建模:
App.Models.Item = Backbone.Model.extend({
});
App.Models.ItemData = Backbone.Model.extend({
defaults: {
'Item': new App.Models.Item
}
});
var item = App.Models.ItemData({
{Item:
{property1: 'data'}
}
});
现在,我希望通过以下方式从页面上的后端系统将数据引导到我的应用程序:
App.Models.Item = Backbone.Model.extend({
});
App.Models.ItemData = Backbone.Model.extend({
defaults: {
'Item': new App.Models.Item
}
});
var item = App.Models.ItemData({
{Item:
{property1: 'data'}
}
});
现在的问题是item.get('item')
返回一个普通的JavaScrip对象,而不是主干.Model对象,因为默认值被覆盖如何创建Backbone.js对象,同时确保item.get('item')
是App.Models.item对象?
我还读到,如果你嵌套主干.Models,你应该编写定制的getter方法,这样你的应用程序的其余部分就不必知道内部数据结构。如果是这样,实现这些setter和getter的正确方法是什么?您可以在ItemData
模型上重写该方法。不需要默认值
。如果未传递空模型,则parse方法将初始化空模型:
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;
}
});
然后使用选项parse:true
初始化您的ItemData
模型:
var item = new App.Models.ItemData({Item:{property1: 'data'}}, {parse:true});
谢谢你的快速回复!只有两个小问题:1。为什么我们需要
attrs=attrs | |{}代码>?2.我必须将if(!attrs.Item instanceof App.Models.Item)
更改为if(!(attrs.Item instanceof App.Models.Item))
才能工作。这是怎么回事?@wowpatrick,将attrs
默认为{}
只是一种保护,以防有人将空/未定义的值传递给该方法,在这种情况下,属性访问attrs.Item
将导致错误。您也可以执行if(attrs){…}
操作,但我通常是这样做的。还为instanceof
检查添加了缺少的括号,对此表示抱歉。没有帕伦斯,!首先计算attrs.Item
,并返回一个布尔值,该值从来不是instanceof
任何东西。我认为在实例化ItemData模型时,您还需要一个“new”。当然,ouch@robmisio。我只是从OP的帖子中复制了实例化,没有检查。懒惰会咬人。