2012-04-17 38 views
8

Mã này không có nhiều ngữ cảnh, nhưng sẽ minh họa cho câu hỏi của tôi. Đó là chế độ xem Backbone được định nghĩa trong mô-đun AMD mà tôi sử dụng để tải qua require.jsThêm sự kiện backbone.js sau khi khởi tạo

Về cơ bản tôi muốn có thể thêm sự kiện vào chế độ xem xương sống sau khi khởi chạy đã được chạy. Tại thời điểm này tôi đang tạo một đối tượng sự kiện trống, và sau đó trong một phương thức được gọi là addView, tôi thêm một sự kiện mỗi khi hàm được gọi. Điều này hiện không hoạt động.

Tôi không chắc chắn tại thời điểm các sự kiện được đăng ký, nhưng tôi nghi ngờ rằng bằng cách nào đó tôi phải có cái nhìn để cập nhật người nghe khi đối tượng events thay đổi?

Có ai biết cách tôi có thể đạt được thêm sự kiện vào Backbone.js sau khi khởi tạo không?

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; 


    }); 

Trả lời

11

Nếu tôi hiểu câu hỏi một cách chính xác, sau khi bạn thêm các sự kiện bổ sung cho các sự kiện băm, gọi delegateEvents() trên nhằm tái ràng buộc các sự kiện.

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

Nó unbind tất cả các cam kết ràng buộc sự kiện hiện có và rebinds tất cả các sự kiện trong sự kiện băm một lần nữa, và tôi không chắc chắn về vấn đề hiệu suất cơ bản của làm điều đó, nhưng cái gì nó phải nhận thức được.

Các vấn đề liên quan