2012-04-17 9 views
8

このコードには多くのコンテキストはありませんが、私の質問を説明します。これは、require.js経由でロードするために使用するAMDモジュールで定義されているバックボーンビューです。初期化後にbackbone.jsイベントを追加する

基本的には、初期化の実行後にバックボーンビューにイベントを追加できます。現時点で私は空のイベントオブジェクトを作成しており、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; 


    }); 

答えて

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 }; 
    } 

これは、すべての既存のイベントのバインディングをアンバインドし、イベント内のすべてのイベントが再びハッシュ、と私はそれをやっての基本的なパフォーマンスの問題のわからないんだけど、その何かが知っておくために再バインドしません。

関連する問題