謝罪私はまだバックボーンの基礎を学んでいます。
Backbone.collectionsについて少し混乱しています。 コレクションのグループで構成され、url属性とmodel属性を持つことができることを理解しています。 Backbone.collectionでカスタムメソッドを定義できますか?
例えば:
var Books = Backbone.Collection.extend({
url: "/books",
model: Book,
getBook: function(id, options){
......
}
});
これは可能ですか?もし可能なら、何をしますか?
ありがとう!
回答:
回答№1は2これは絶対に可能であり、そのコレクションに固有の機能をカプセル化する素晴らしい方法です。通常、実際にはモデルの機能をさらに拡張しています。
書籍のコレクションがある場合、コレクションにアクセス、プルーニング、またはシリアル化するためのヘルパーメソッドを記述できます。私はあなたのビジネスニーズが何であるかわからない。
見てください underscore.js 利用可能なコレクション機能のために、あなたは車輪を再発明しません。
回答№2の場合は0
コレクションのカスタムメソッドは通常、次の2つのいずれかを実行します。
- カスタムアクションが発生したときにトリガーする必要がある場合は、モデルによって発生したイベントを処理します
- 再利用可能なループ/フィルタリング/ソートを保持して、アプリケーション全体でそのようなものをインライン化する必要がないようにします
コレクションが通常これを行うと言うと、メソッドがこれらの2つのカテゴリの外にある場合、「間違っている」とは限りません。これは、コレクションのカスタムメソッドにどのようなロジックを入れたいかを知るためです。
書籍を例に取りましょう。 "コレクション内のすべての書籍の合計ページ数を返すカスタムメソッドが必要だとしましょう。これは次のようになります。
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());