この質問に続いて、Backbone.Collectionをいくつかのカスタムメソッドで拡張しようとしています。ただし、コンソールとソースの間で一貫性のない動作が発生しています。
テストは次のようになります
HTML
...
<script type="text/javascript" src="./libs/underscore.js"></script>
<script type="text/javascript" src="./libs/backbone.js"></script>
<script type="text/javascript" src="./libs/backbone-extend.js"></script>
<script type="text/javascript" src="./qunit/qunit.js"></script>
<script type="text/javascript" src="./backbone-extend-tests.js"></script>
</body></html>
バックボーン-extend.js
Backbone.Collection.prototype.extract = function() {
// placeholder to test binding
return 'foo';
};
backback-extend-tests.js
test('extending backbone', function () {
ok(typeof Backbone.Collection.extract == 'function');
console.log(Backbone.Collection.extract); // undefined
});
足りないものはありますか?すべてのソースが読み込まれていることを確認しました
JFTR-これ...
_.extend(Backbone.Collection, {extract:function(){return'foo';});
...プロトタイプの拡張方法を使用しないだけで機能します。Backboneのドキュメントでプロトタイプの拡張が推奨されていることを考えると、一方の方法が機能し、もう一方の方法が機能しない理由はわかりません(ただし、モデルについて具体的に言及しています)。ボンネットの下をもっと詳しく見る必要があると思います...
更新: 後世のために、これをbackbone-extend.jsファイルに配置します...
_.extend(Backbone.Collection.prototype, {
extract : function (model) {
var _model = model;
this.remove(model);
return _model;
}
});
...動作します