1

我正在关注 David Sulc 关于木偶的教程。 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 猫)

猫 1

猫 2

猫 3

类别 2:蓝猫(02 猫)

猫 X

猫 Y

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

4

2 回答 2

8

您可以使用该groupBy函数按属性对AngryCat模型进行分组,然后按其等级对每个组进行单独排序(我假设您的模型有一个名为数字的属性)。我还假设您有一个名为的初始集合变量,其中包含您的模型。categorysortByrankangryCats

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集合(组是数组),然后使用对每个集合进行排序作为链接问题概述的比较器。

希望这可以帮助

于 2013-07-05T06:27:44.393 回答
2

您可以通过将 dcarson 的代码与我关于嵌套视图的博客文章相结合来实现您想要做的事情:http: //davidsulc.com/blog/2013/02/03/tutorial-nested-views-using-backbone-marionettes-compositeview /

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

于 2013-07-05T11:24:56.287 回答