Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干js模型响应阵列到主干集合_Javascript_Backbone.js - Fatal编程技术网

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
});