我正在关注David Sulc关于Marionette的教程。 http://davidsulc.com/blog/2012/04/15/a-simple-backbone-marionette-tutorial/并且为了学习延伸它。
现在让我们说每只猫的名字,等级以及类别
AngryCat = Backbone.Model.extend({
urlRoot: '/api/cats',
defaults: {
name: "New Cat Name",
category: "Red Cat"
}
});
现在我想制作一个这样的复合视图:
第1类:红猫(03只猫)
Cat 1
Cat 2
Cat 3
第2类:蓝猫(02只猫)
Cat X
Cat Y
我怎样才能做到这一点。请帮忙!
答案 0 :(得分:8)
您可以使用groupBy
功能按AngryCat
属性对category
模型进行分组,然后使用sortBy
按类别对每个组进行排序(我是假设您的模型具有名为rank
的属性(数字)。我还假设您有一个名为angryCats
的初始集合变量,其中包含您的模型。
var groups = angryCats.groupBy(function(ac) {
return ac.get("category");
});
groups.each(function(group, key) {
// This will output the category name & item count
console.log(key + " " + group.length + " items");
group.sortBy(function (model) {
return model.get("rank");
});
group.each(function(model) {
// This will output the model name
console.log(model.get("name"));
});
});
此外,如果您希望按模型的字符串属性(例如name
属性)对每个组进行排序,则需要从每个组中创建一个新的本地范围的angryCats
集合(这些组是数组),然后按照链接问题概述using a comparator对每个集合进行排序。
希望这有帮助
答案 1 :(得分:2)
您可以通过将dcarson的代码与我在嵌套视图上的博客文章相结合来实现您想要做的事情:http://davidsulc.com/blog/2013/02/03/tutorial-nested-views-using-backbone-marionettes-compositeview/
您需要为复合视图提供一组组。复合视图的项目视图将是一个集合视图,显示该组中的猫(即在链接的博客文章中完成的操作)。