Javascript 主干js模型响应阵列到主干集合
如果我有一个模型,其中一些参数是集合,例如:Javascript 主干js模型响应阵列到主干集合,javascript,backbone.js,Javascript,Backbone.js,如果我有一个模型,其中一些参数是集合,例如: var Mdl = Backbone.Model.extend({ defaults:{ test: new Backbone.Collection() } }); 现在让我们假设我在这个模型上执行一个fetch,在我的服务器端响应中,我有一个名为test的属性,它是一个数组。我想将数组添加到我的集合中,或使用此数组重置它,以便它仍然是主干集合,但是默认情况下,如果我在模型上运行重置,则不会这样做,正如预期的那样,它将在响应中用数
var Mdl = Backbone.Model.extend({
defaults:{
test: new Backbone.Collection()
}
});
现在让我们假设我在这个模型上执行一个fetch,在我的服务器端响应中,我有一个名为test的属性,它是一个数组。我想将数组添加到我的集合中,或使用此数组重置它,以便它仍然是主干集合,但是默认情况下,如果我在模型上运行重置,则不会这样做,正如预期的那样,它将在响应中用数组覆盖测试属性
将响应属性测试作为主干集合而不是数组来处理,最好的方法是什么?我主要想检查属性是否是数组,然后检查属性是否已在模型上定义为集合,如果是,则使用数组重置此集合,而不是覆盖它
我可以通过创建自己的主干同步来实现这一点,但我不确定这是否是最好的方式,你们怎么看
谢谢。如果在Model.defaults中定义对象,首先会遇到奇怪的问题 如果确实要执行此操作,请尝试使用延迟函数:
// code no tested
var Mdl = Backbone.Model.extend({
defaults:{
test: function() { return new Backbone.Collection() }
}
});
我仍然认为这不是一个好主意,我真的更喜欢在模型中包含基本值。我认为主干所期望的是属性
在这种情况下,我要做的是使服务器JSON响应具有一个名为test_data的键,并在模型中手动解析它。初始化:
查看Model.gettest_数据是原始数据,而实际对象是Model.test,最后一个数据不包括在Model.attributes中。我用于此类问题
您可以编写这样的代码来定义关系
Mdl = Backbone.RelationalModel.extend({
relations: [{
type: Backbone.HasMany,
key: 'test',
relatedModel: 'TestModel',
collectionType: 'TestCollection',
reverseRelation: {
key: 'mdl'
}
}]
});
TestModel = Backbone.RelationalModel.extend({});
TestCollection = Backbone.Collection.extend({
model: TestModel
});
然后,它会将测试属性转换为主干集合。同步不需要覆盖。主干网提供了一种解析方法,该方法接受响应。您需要编写代码来完成您现在想要做的事情。您实际上是这样做的吗?我宁愿创建一个集合实例,如下所示。var tstCol=Backbone.Collection.extend{}。。。默认值:{test:new tstCol}。。。
Mdl = Backbone.RelationalModel.extend({
relations: [{
type: Backbone.HasMany,
key: 'test',
relatedModel: 'TestModel',
collectionType: 'TestCollection',
reverseRelation: {
key: 'mdl'
}
}]
});
TestModel = Backbone.RelationalModel.extend({});
TestCollection = Backbone.Collection.extend({
model: TestModel
});