2

Backbone.Eventsサブオブジェクトのシステムを親オブジェクトのシステムに置き換えたいです。例:

// initialize function of the repository object
initialize: function() {
        var users = new Backbone.Collection();
        
        // we save a reference of our event system in ourEvents object
        var ourEvents = {};
        ourEvents.on = this.on;
        ourEvents.off = this.off;
        ourEvents.trigger = this.trigger;
        ourEvents.bind = this.bind;
        ourEvents.unbind = this.unbind;

        // now we overwrite events in users.collection with our one
        _.extend(users, ourEvents);

        // now we listen on the test event over this
        this.on('test', function() { alert('yiha'); });

        // but triggering over users works too!
        users.trigger('test');
}

1 対多のイベント システムができました。1 つのリスナーと、イベントを発生させることができる多数のオブジェクト。

これは、フロントエンドと同じビュー システムを使用する場合Backbone.Collectionsや、別のビュー システムを使用する場合に役立ちます。Backbone.Models

ご覧のとおり、ソリューションはまだ最適ではありません。

イベントシステムを上書きするより短い方法はありますか?

更新: バックボーン ソース コードを調べたところBackbone.Events、コールバック リストが以下に保存 されていることがわかりましたthis._callback。これは、少なくとも理論的には機能するはずです。

this.users._callbacks = this._callbacks = {};
4

1 に答える 1

3

それを行うためのクリーンなバックボーンの方法は、オブジェクトから何らかの理由でイベントをコピーしようとするのではなく、コレクションにイベントをバインドすることです

// initialize function of the repository object
initialize: function() {
        var users = new Backbone.Collection();

        users.on('on', this.on, this);
        users.on('off', this.off, this); // third parameter to set context of method to the current view
        // ...and so on
        // you were listening here on the current view but triggering later on collection - this would never work
        users.trigger('on'); // would call the this.on method in the context of current view
        // if this method would have been triggered from inside of the users collection it would still trigger the desired method inside of this view
}

ヒント - アンダースコアで始まるメソッドと変数に触れたり利用したりしないでください。これらはプライベート API とプロパティであることを意図しており、パブリック メソッド/プロパティのみが変更されないことが保証されているため、次のリリースでいつでも変更される可能性があります。リリースします。私はあなたがここで少し複雑にしようとしていて、あなたが作ったエラーのいくつかを見ていると信じています.

于 2012-08-26T19:26:21.733 に答える