如何按模型类别对骨干集合进行分组,然后按模型等级对每个组进行排序

时间:2013-07-05 04:56:51

标签: backbone.js marionette backbone-views backbone-events

我正在关注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

我怎样才能做到这一点。请帮忙!

2 个答案:

答案 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/

您需要为复合视图提供一组组。复合视图的项目视图将是一个集合视图,显示该组中的猫(即在链接的博客文章中完成的操作)。