9

このコードにはあまり文脈がありませんが、私の質問を説明します。これは、require.js 経由でロードするために使用する AMD モジュールで定義されたバックボーン ビューです。

基本的に、初期化の実行後にバックボーン ビューにイベントを追加できるようにしたいと考えています。現在、空のイベント オブジェクトを作成しており、addView というメソッドで、関数が呼び出されるたびにイベントを追加しています。これは現在機能していません。

イベントがどの時点で登録されているかはわかりませんが、eventsオブジェクトが変更されたときにビューを更新してリスナーを更新する必要があると思われますか?

初期化後にBackbone.jsにイベントを追加する方法を知っている人はいますか?

   define([
    'jQuery',
    'Backbone'],

    function ($, Backbone) {

        var contentViews = new Array();

        var SlidePanelView = Backbone.View.extend({

            events: {},

            /// <param name="targetDataAtt">The unique value inside the target's Data-Slide-Panel-Id attribute</param>  
            /// <param name="event">Backbone event to trigger view</param>
            /// <param name="destroyOnRemove">True to destroy view when removed, False otherwise (Default true)</param>  
            addView: function (targetDataAtt, event, view, destroyOnRemove) {
                destroyOnRemove = typeof destroyOnRemove !== 'undefined' ? destroyOnRemove : true;

                this.events[event] = "viewEventFired";
                contentViews[targetDataAtt] = { View: view, DestroyOnRemove: destroyOnRemove };
            },

            viewEventFired: function (e) {

                var target = $(e.target);
                var id = target.attr('data-slide-panel-id');
                console.log(id);
            }

        });

        // Return a singleton??
        return new SlidePanelView;


    });
4

1 に答える 1

11

質問を正しく理解している場合は、イベント ハッシュに追加のイベントを追加した後、ビューでdelegateEvents()を呼び出してイベントを再バインドします。

    addView: function (targetDataAtt, event, view, destroyOnRemove) {
       destroyOnRemove = typeof destroyOnRemove !== 'undefined' ? destroyOnRemove : true;
       this.events[event] = "viewEventFired";
       this.delegateEvents();
       contentViews[targetDataAtt] = { View: view, DestroyOnRemove: destroyOnRemove };
    }

既存のすべてのイベントバインディングをアンバインドし、イベントハッシュ内のすべてのイベントを再度バインドします。これを行うことの根本的なパフォーマンスの問題はわかりませんが、注意が必要です。

于 2012-04-17T02:01:50.670 に答える