Backbone Collectionのremoveメソッドをオーバーライドしてから、親を呼び出す方法

Fijjit

SOや他の場所への投稿からの推奨事項に従っていますが、これを機能させることができません。

すべてのモデルが削除された後に「削除された」イベントを発生させるために、すべてのバックボーンコレクションの削除機能をオーバーライドしたいと思います。

私はこれを試しました:ここをいじる

Backbone.Collection.prototype.remove = function(models, options){
    console.log('removing');
    Backbone.Collection.prototype.remove.call(this, models, options);
    this.trigger('removed', models);    
};

var MyColl = Backbone.Collection.extend({ });
var MyModel = Backbone.Model.extend({ });

var myColl = new MyColl();
var myModel = new MyModel();

myColl.add(myModel);
myColl.remove(myModel);

...しかし、それ自体を再帰的に呼び出しているように見え、親(ベース)のremoveメソッドを起動することはありません。

removeメソッドを正しくオーバーライドしてbaseメソッドを呼び出すにはどうすればよいですか?

ianmstew

私のお気に入りの方法はwrap()、アンダースコアを使用することです。特に、アンダースコアはデフォルトでバックボーンで使用できるためです。私は個人的に使用を楽しんでいます。wrap()なぜなら、次のように、何が起こっているのかがわかりやすい英語で明らかになるからです。

Backbone.Collection.prototype.remove = _.wrap(
    Backbone.Collection.prototype.remove,
    function(original_remove, models, options) {
        // Capture original function arguments
        var original_args = Array.prototype.splice.call(arguments, 0, 1);

        // Before
        console.log('removing');

        // Call original function with original arguments
        original_remove.apply(this, original_args);

        // After
        this.trigger('removed', models);
    });

唯一の注意点は、Array.prototype.splice最初のパラメーター(アンダースコアが元の関数に設定する)を取り除く呼び出しです。ただし、これによりapply()、元の引数で使用できるようになります。これは、call()明示的に名前を付ける必要がなく、任意の数の引数を処理するため、少し柔軟性があります。

Array.prototype.spliceではなくの使用に注意してくださいarguments.splice()。これはarguments、完全なJavascript配列型ではなく、独自のプロトタイプでspliceメソッドを実行しないために必要です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Backbone.syncをオーバーライドする方法は?

分類Dev

イベントハンドラーから関数renderを呼び出すBackbone.js

分類Dev

KnockBack ViewModelを使用して、基になるBackboneモデルのメソッドから計算されたオブザーバブルを作成する方法はありますか?

分類Dev

Pythonでは、親クラスから子クラスのメソッドオーバーライドを呼び出す方法はありますか?

分類Dev

トレイトのオーバーライドマジックメソッドから親マジックメソッドを呼び出す

分類Dev

オーバーライドされた静的メソッドを親から呼び出す

分類Dev

両方の親クラスから「オーバーライドされた」メソッドを呼び出す方法は?

分類Dev

Backbone.js /require.js-モデル関数をオーバーライドしてバックエンドをサービスとして機能させる

分類Dev

子から親プライベートメソッドを呼び出す方法?

分類Dev

Backbone.D3ViewをjQueryバックボーンの代替としてロードする方法

分類Dev

オーバーライドするメソッドは親メソッドのみを呼び出します-便利ですか?

分類Dev

JSONの代わりにXMLを投稿して、Backboneを使用してRESTfulサービスを呼び出す

分類Dev

2つのajax呼び出しを使用してBackbone.modelでカスタムヘッダーをajax呼び出しに設定します

分類Dev

メソッドをオーバーライドしながらスーパークラスのメソッドを呼び出す目的は何ですか?

分類Dev

他の関数からBackboneビュー関数を呼び出す際の問題

分類Dev

Revealing PrototypePatternを使用してオーバーライドされたメソッドを内部的に呼び出す方法

分類Dev

javascriptの「親」オブジェクトから「プライベート」メソッドを呼び出す

分類Dev

抽象オーバーライドとして宣言されている基本メソッドを呼び出す方法

分類Dev

オーバーライドされたメソッドの計算式からベースF#メソッドを呼び出す方法は?

分類Dev

子からのオーバーライドされたメソッドの呼び出しをブロックする方法

分類Dev

オーバーライドされたメソッド内で元のメソッドを呼び出す方法

分類Dev

Backbone.js ソースコード - eventsApi

分類Dev

Backbone.js collection getting multiple models

分類Dev

Backbone JS - Combination of collection, views and models

分類Dev

source-Override / implementメソッドpasteメソッド呼び出しを介してEclipseのメソッドをオーバーライドする理由

分類Dev

メソッドをオーバーライドして基本型にキャストした後、どのメソッドが呼び出されますか?

分類Dev

Backbone.js REST呼び出しを理解する

分類Dev

Coffeescriptの子クラスでBackbone.Router.execute関数をオーバーライドするにはどうすればよいですか?

分類Dev

TestNGを使用してSeleniumのメインクラスからクラスにグローバルメソッドを呼び出す方法

Related 関連記事

  1. 1

    Backbone.syncをオーバーライドする方法は?

  2. 2

    イベントハンドラーから関数renderを呼び出すBackbone.js

  3. 3

    KnockBack ViewModelを使用して、基になるBackboneモデルのメソッドから計算されたオブザーバブルを作成する方法はありますか?

  4. 4

    Pythonでは、親クラスから子クラスのメソッドオーバーライドを呼び出す方法はありますか?

  5. 5

    トレイトのオーバーライドマジックメソッドから親マジックメソッドを呼び出す

  6. 6

    オーバーライドされた静的メソッドを親から呼び出す

  7. 7

    両方の親クラスから「オーバーライドされた」メソッドを呼び出す方法は?

  8. 8

    Backbone.js /require.js-モデル関数をオーバーライドしてバックエンドをサービスとして機能させる

  9. 9

    子から親プライベートメソッドを呼び出す方法?

  10. 10

    Backbone.D3ViewをjQueryバックボーンの代替としてロードする方法

  11. 11

    オーバーライドするメソッドは親メソッドのみを呼び出します-便利ですか?

  12. 12

    JSONの代わりにXMLを投稿して、Backboneを使用してRESTfulサービスを呼び出す

  13. 13

    2つのajax呼び出しを使用してBackbone.modelでカスタムヘッダーをajax呼び出しに設定します

  14. 14

    メソッドをオーバーライドしながらスーパークラスのメソッドを呼び出す目的は何ですか?

  15. 15

    他の関数からBackboneビュー関数を呼び出す際の問題

  16. 16

    Revealing PrototypePatternを使用してオーバーライドされたメソッドを内部的に呼び出す方法

  17. 17

    javascriptの「親」オブジェクトから「プライベート」メソッドを呼び出す

  18. 18

    抽象オーバーライドとして宣言されている基本メソッドを呼び出す方法

  19. 19

    オーバーライドされたメソッドの計算式からベースF#メソッドを呼び出す方法は?

  20. 20

    子からのオーバーライドされたメソッドの呼び出しをブロックする方法

  21. 21

    オーバーライドされたメソッド内で元のメソッドを呼び出す方法

  22. 22

    Backbone.js ソースコード - eventsApi

  23. 23

    Backbone.js collection getting multiple models

  24. 24

    Backbone JS - Combination of collection, views and models

  25. 25

    source-Override / implementメソッドpasteメソッド呼び出しを介してEclipseのメソッドをオーバーライドする理由

  26. 26

    メソッドをオーバーライドして基本型にキャストした後、どのメソッドが呼び出されますか?

  27. 27

    Backbone.js REST呼び出しを理解する

  28. 28

    Coffeescriptの子クラスでBackbone.Router.execute関数をオーバーライドするにはどうすればよいですか?

  29. 29

    TestNGを使用してSeleniumのメインクラスからクラスにグローバルメソッドを呼び出す方法

ホットタグ

アーカイブ