道歉我还在学习Backbone的基础知识。
我对Backbone.collections有点困惑。我知道它们由一组集合组成,并且可以具有url和model属性。你能在backbone.collection中定义一个自定义方法吗?
例如:
var Books = Backbone.Collection.extend({
url: '/books',
model: Book,
getBook: function(id, options){
......
}
});
这可能吗?如果可行,它会做什么?
谢谢!
答案 0 :(得分:2)
这绝对是可能的,也是封装特定于该集合的功能的好方法。虽然通常在实践中我发现自己更多地扩展了模型的功能。
至于它会做什么......如果你有一系列书籍,你可能想要编写帮助方法来访问,修剪或序列化你的收藏。我不确定您的业务需求是什么。
请查看underscore.js以了解可用的收集功能,因此您不需要重新发明轮子。
答案 1 :(得分:0)
集合上的自定义方法通常可以执行以下两种操作之一:
当我说收藏通常会这样做时,如果你的方法超出这两个类别,那么它并不一定意味着你做错了什么,这只是想知道什么样的逻辑您可能希望将其置于集合自定义方法中。
以您的图书为例,我们假设您想要一个自定义方法,该方法可以返回您馆藏中所有图书的总页数。这可能看起来像这样:
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());