2015-06-08 27 views
0

通过阅读Addy Osmani编写的“开发Backbone.js应用程序”的教科书并尝试一个实例,可以看到Backbone.Collection类的所有元素都可以具有不同类型的元素。扩展Backbone.Collection的类也可以包含不同类型的元素,就像所有元素不必一致。Backbone.js:支持不同类型对象的“Backbone.Collection”类以及该类如何工作

让我告诉你,我用我的例子代码:

var ToDosCollection = new Backbone.Collection(); 

ToDosCollection.add([ 
    { title: 'go to Jamaica.', completed: false }, 
    { task: "aldvjalkdgj", level: 3, timeDue: "6:00 PM Today" } 
]); 

console.log('Collection size: ' + ToDosCollection.length); 
ToDosCollection.reset([ 
    { slogan: "Curse you, Sephiroth.", population: 5500,}, 
    { project: "Final Fantasy X" }, 
    { amount: 500 } 
]); 

// Above logs 'Collection reset.' 
console.log('Collection size: ' + ToDosCollection.length); 
alert(JSON.stringify(ToDosCollection.get(0))); 

var GitHubRepository = Backbone.Model.extend({ 
     defaults: { 
     nameOfRepository : "", 
     owner : "", 
     members : [], 
     dateCreated : "", 
     commits: 0, 
     additions: 0, 
     deletions: 0, 
    }, 

    initialize : function(){ 
     this.on("change", function() { 
     console.log("CHANGE DETECTED"); 
    }); 

    this.on("change:nameOfRepository", function(){ 
     console.log("The name of the repository has been changed."); 
    }); 

    this.on("change:owner", function(){ 
     console.log("The owner of the repository has been changed."); 
    }); 

    this.on("change:members", function(){ 
     console.log("The members this repository belongs to have been changed."); 
    }); 

    this.on("change:dateCreated", function(){ 
     console.log("The date this repository was created has been changed."); 
    }); 

    this.on("change:commits", function(){ 
     console.log("The # of commits this repository has have been changed."); 
    }); 

    this.on("change:additions", function(){ 
     console.log("The # of additions this repository has have been changed."); 
    }); 

    this.on("change:deletions", function(){ 
     console.log("The # of deletions this repository has have been changed."); 
     }); 
    } 
}); 

var GitHubRepositoryCollection = Backbone.Collection.extend({ 
    model: GitHubRepository 
}); 

var newCollection = new GitHubRepositoryCollection(); 

newCollection.add(
    {newObject: new GitHubRepository()}, 
    {title: "Rabbits"}, 
    {elementNumber: 5} 
); 

我是否理解正确吗?或者,对于某些见解,这实际上是如何工作的?对我来说,我觉得我正在类似于Java中支持Object对象的ArrayList实例。

编辑:考虑到我已经得到了至少一个反对这个问题的投票,我想问一下,“Backbone.js中的ItemView如何工作?”

+0

据我了解,一个特定的集合只能包含特定模型的数组(比如'GitHubRepositoryCollection'),而一个非特定的集合可以包含任何东西。请参阅骨干文档:“collection.model: 重写此属性以指定集合包含的模型类。如果已定义,则可以传递原始属性对象(和数组)以添加,创建和重置,并且属性将被转换成适当类型的模型。“ – m4lt3

回答

0

为了渲染集合中每个模型的itemview,我想最好保持每个模型类似。否则,您将不得不为每个模型构建不同的itemview,这会增加您编写代码的开销,这是不好的,因为我们应该使用主干来渲染将以相同方式渲染相同数据的视图。如果要渲染不同的项目视图,最好有不同的组合视图或集合视图,这些视图会自动执行渲染itemview最终会减少你的开销。

+0

我是新来的ItemView。 – GregPDesJav

+0

@GregPDesJav Itemview是这样一个视图,即骨架为集合中的每个模型自身渲染,前提是您已在集合或复合视图中给出itemview和itemviewcontainer –

+0

@nikhilmehta您正在混合牵线木偶和骨干。牵线木偶是骨干的视野和建筑延伸。骨干本身不支持项目视图 – m4lt3

相关问题