backbonejs永远不会结束模型内的集合

时间:2013-03-17 17:46:44

标签: backbone.js

为什么backbonejs在模型中创建了大量的集合,我不知道它什么时候停止。

http://backbonetutorials.com/what-is-a-collection/获取此示例。如果您查看控制台并继续打开d对象,其中始终会有一个“集合”对象,它只会重复重复同一个对象。

我不知道这是一个错误还是其他什么,但我不确定这是否正常。

有人请赐教。感谢。

var Song = Backbone.Model.extend({
    defaults: {
        name: "Not specified",
        artist: "Not specified"
    },
    initialize: function(){
        console.log("Music is the answer");
    }
});

var Album = Backbone.Collection.extend({
    model: Song
});

var song1 = new Song({ name: "How Bizarre", artist: "OMC" });
var song2 = new Song({ name: "Sexual Healing", artist: "Marvin Gaye" });
var song3 = new Song({ name: "Talk It Over In Bed", artist: "OMC" });

var myAlbum = new Album([ song1, song2, song3]);
console.log( myAlbum.models ); // [song1, song2, song3]

@ryan

是的,我知道模型可能包含对其集合的引用。但是,拥有这种似乎没有尽头的链式对象有点奇怪。对象树是这样的:

[d, d ,d]
   0 > d
        > collection
            > models
                 0 > d
                      > collection
                           > models
                                0 > d
                                     > collection
                                           > models
                                                  0 > d
                                                   ...
                                                   keeps on and on and on

为什么会这样?

2 个答案:

答案 0 :(得分:3)

没有错。它们只是参考。一旦将Song添加到该集合中,每个Album都会包含对其集合collection -> user的引用。

更新。也许this simple example会帮助你理解没有异常。这基本上就是骨干网正在做的事情。它的唯一目的是让您轻松导航user -> collection或导航var site = { name: 'stackoverflow' }; var users = [{ name: 'pneftali' }]; for (var i = 0; i < users.length; i++) { users[i].site = site; } site.users = users; console.log(site.users);

{{1}}

答案 1 :(得分:2)

每个model都引用了collection。每个collection都必须引用其models。 Javascript仅包含对集合的引用。开发人员工具栏只显示参考的详细信息。它们实际上并不相互嵌套。有相同的对象。您可以从模型cid确认不会改变链条。