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 Don';不理解主干集合.create不发布数组的原因_Javascript_Backbone.js - Fatal编程技术网

Javascript Don';不理解主干集合.create不发布数组的原因

Javascript Don';不理解主干集合.create不发布数组的原因,javascript,backbone.js,Javascript,Backbone.js,我正在测试主干,遇到了一点问题 如果我将Collection.create与模型数组一起使用,那么发布到服务器的JSON似乎不太容易解析 例如: var Person = Backbone.Model.extend({ initialize: function() { this.on( 'all', function(e) { console.log( "Person model all " + this.get("name") + ",

我正在测试主干,遇到了一点问题

如果我将Collection.create与模型数组一起使用,那么发布到服务器的JSON似乎不太容易解析

例如:

var Person = Backbone.Model.extend({
    initialize: function() {
        this.on( 'all', function(e)
                { console.log( "Person model all " + this.get("name") + ", event: " + e ); }
            );
    }
});

var People = Backbone.Collection.extend({
    initialize: function() {
        this.on( 'all', function(e) { console.log( "People collection event: " + e ); } );
    },
    url: "/models/",
    model: Person
});

var people = new People();
people.create( [ { "name":"joe", "age":24 }, { "name":"dan", "age":42 } ] );
然后,我的服务器接收以下JSON:

{"0":{"name":"joe","age":24},"1":{"name":"dan","age":42}}
这是什么?为什么不是一个简单的数组:

[{"name":"joe","age":24},{"name":"dan","age":42}]
实际上,解析非常困难,因为更糟糕的是,如果执行Model.save()操作,则会得到一个没有这些ID值的简单对象(更有效)

我能够解析此收集帖子的唯一方法是执行以下操作:

for( var n in payloadobj )
{
    var person = new Object();
    person.id = parseInt(n, 10);
    person.name = payloadobj[n].name;
    person.age = payloadobj[n].age;
}

有人知道这是为什么吗?我是否遗漏了一些东西,我是否要覆盖一些东西以使其更加一致,还是应该避免收集。创建?

主干网中的收集在内部使用阵列,但旨在方便地提供对有序和无序模型的访问。因此,当您添加没有id的人员实例时,会自动为其分配一个cid(clientId)属性(因为您没有提供备用id)

但是,在本例中,您的代码正在调用
Create
方法,该方法一次只接受一个模型(而不是数组)。因此,它在内部创建了错误的结构。您可以这样做:

var people = new People([{ "name": "joe", "age": 24 }, { "name": "dan", "age": 42}]);
create
方法只是一种方便的方法,它解析每个模型上的单个模型(并查找
cid
/
id
)(前缀为“c”)


因此,如果您编写自己的save函数,只需在people集合上调用
toJSON
,就可以得到您想要的(一组Person对象).

仍然很奇怪的是,它以这种方式将这种奇怪的结构发布到服务器上,因为a)服务器不关心主干使用的内部ID,b)为了证明(a),当您一次只创建一个模型时,它不会发布cid,而是发布一个正确的JSON对象。。。我认为应该避免在一个“create”中创建多个对象——我意识到我误读了您的代码(尤其是对“create”的调用)。所以,主干创建的内部结构完全不是您想要的(它仍然在创建一个CID,但它根本不是真正创建一个Person对象)。我已经确定了我的答案。