我可以在Backbone.collections中创建自定义方法吗?

时间:2014-06-24 23:34:58

标签: javascript backbone.js backbone.js-collections

道歉我还在学习Backbone的基础知识。

我对Backbone.collections有点困惑。我知道它们由一组集合组成,并且可以具有url和model属性。你能在backbone.collection中定义一个自定义方法吗?

例如:

var Books = Backbone.Collection.extend({
    url: '/books',
    model: Book,
    getBook: function(id, options){
                  ......
            }
});

这可能吗?如果可行,它会做什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

这绝对是可能的,也是封装特定于该集合的功能的好方法。虽然通常在实践中我发现自己更多地扩展了模型的功能。

至于它会做什么......如果你有一系列书籍,你可能想要编写帮助方法来访问,修剪或序列化你的收藏。我不确定您的业务需求是什么。

请查看underscore.js以了解可用的收集功能,因此您不需要重新发明轮子。

答案 1 :(得分:0)

集合上的自定义方法通常可以执行以下两种操作之一:

  1. 处理模型触发的事件,如果需要在发生时触发自定义操作
  2. 保持可重复使用的循环/过滤/排序,以便您不必在整个应用程序中内联这些内容
  3. 当我说收藏通常会这样做时,如果你的方法超出这两个类别,那么它并不一定意味着你做错了什么,这只是想知道什么样的逻辑您可能希望将其置于集合自定义方法中。

    以您的图书为例,我们假设您想要一个自定义方法,该方法可以返回您馆藏中所有图书的总页数。这可能看起来像这样:

    var Books = Backbone.Collection.extend({
        url: '/books',
        model: Book,
        getTotalNumPages: function() {
            var numPages = 0;
            this.each(function(model) {
                numPages += parseInt(model.get("pageCount"), 10);
            });
            return numPages;
        }
    });
    
    
    // Elsewhere in your app
    console.log("Total pages: ", books.getTotalNumPages());