2013-03-17 80 views
0

为什么backbonejs在模型中创建大量集合,我不知道它何时停止。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 

为什么这样呢?

回答

3

没有什么错。他们只是参考。每当Song包含对其集合的引用,即Album,一旦它被添加到该集合中。

更新。也许this simple example将帮助你了解什么都不正常。这基本上是干什么的。它的唯一目的是让您轻松浏览collection -> user或浏览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); 
+0

感谢您的回答。我已经更新了我的问题以进一步说明我的观点。 – pneftali 2013-03-18 01:28:08

+0

@pneftali看到我的更新 – ryan 2013-03-18 11:41:54

+0

我明白了。现在过了一段时间才有意义。模型包含对其集合的引用,因此在控制台上查看时它看起来像一个无限循环。谢谢! :) – pneftali 2013-03-18 15:29:02

2

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

+0

也正确,谢谢! :) – pneftali 2013-03-18 15:30:59