2012-09-10 27 views
12

Tôi đã những sự kiện rơi băm -Unbind Backbone View Events

events: 
    'click #someButton : 'someFunction' 

Để đóng view Tôi đã thử

close: 
    $("#someButton").unbind("click") 

`close: 

     $("#someButton").remove()` 

Nhưng someFunction vẫn bị sa thải hơn hơn một lần. Làm cách nào để bỏ liên kết sự kiện này khỏi nút?

Tôi cũng đã thử

$(@el).find("#someButton").unbind("click") as well 
+0

luôn tham khảo [Tài liệu về xương sống] (http://backbonejs.org/#Events) –

Trả lời

26

Backbone.js xem các sự kiện được giao cho nhân xem el (vì vậy không có sự kiện ràng buộc để yếu tố #someButton của bạn mà là khi một sự kiện nhấp chuột bong bóng lên đến el nó kiểm tra xem nếu sự kiện này đến từ một yếu tố phù hợp với selector đó), đó là trường hợp để loại bỏ các trường hợp bạn cần phải loại bỏ nó ra khỏi el, ví dụ

$(this.el).off('click', '#someButton'); 

Nếu bạn muốn loại bỏ al l sự kiện được ủy quyền bạn chỉ có thể sử dụng phương pháp undelegate của chế độ xem

+0

mhmm, tôi đã thử thực hiện điều đó, nhưng chức năng vẫn bắn nhiều hơn một lần – praks5432

+0

Thử một cái gì đó như '$ (this. $ El) .off ("click", "#someButton"); ' – Jack

+0

nó hoạt động :) những gì đã sai với điều unbind.click (" click ")? – praks5432

0

Giải thích và câu trả lời của Jack rất tuyệt. Thật không may, ví dụ mã của ông đã không làm việc cho tôi. Thay vì sử dụng:

$(this.el).off('click', '#someButton'); 

tôi đã phải sử dụng:

this.$el.off('click', '#someButton'); 

có ý nghĩa đối với tôi, bởi vì sự kiện này được ràng buộc để this.$el đối tượng.

0

Để thêm hơn nữa, tôi đã sử dụng this.$el.off(); bên trong khởi tạo trong một chế độ xem phụ để tiêu diệt tất cả các sự kiện được liên kết với chế độ xem phụ. Sự kiện tương tự sẽ kích hoạt X số lần làm mới dữ liệu được gọi.

tôi thấy các chỉ tiêu trùng lặp sử dụng:

var $target = $(e.currentTarget); 
console.log($target); 

tôi sẽ thêm một bình luận cho câu trả lời, nhưng tôi có uy tín thấp.