2011-11-21 32 views
10

Tôi có chế độ xem có chế độ xem bên trong nó (cùng một chế độ xem trên thực tế, đệ quy của nó). Tôi chỉ muốn xem nội bộ để xử lý sự kiện từ sự kiện onclick 'a'. Tôi đã cố gắng làm điều này bằng cách chỉ định các con trực tiếp trong bộ chọn, nhưng nó không hoạt động.Làm cách nào để chỉ định trẻ em trong trình xử lý sự kiện Backbone.js?

iv thử:

 
events: { 
    'click >a': 'toggle' 
}, 

 
events: { 
    'click > a': 'toggle' 
}, 

nhưng họ không làm việc, bất cứ đề nghị? (Lưu ý: làm những việc như sử dụng thẻ và lớp sẽ không hoạt động vì chế độ xem là đệ quy (nghĩa là cả hai bên trong và bên ngoài có cùng định nghĩa sự kiện)

+0

bạn có thể chỉ cho cái nhìn đầy đủ của bạn và cách bạn đang instantiating nó ? Trong Backbone, bộ chọn jQuery được tự động dò tìm thành phần khung nhìn, nó sẽ hoạt động theo lý thuyết. –

Trả lời

9

tôi đã chạy vào cùng một vấn đề, và đã giải quyết nó bằng cách ngăn chặn sự lan truyền của sự kiện trong ví dụ ...

events: { 
    'click a': 'toggle' 
}, 

toggle: function (e) { 

    // Stop event here. 
    e.stopImmediatePropagation(); 

    // Do more stuff... 

} 

Điều này không trả lời câu hỏi của bạn về cách chỉ định các bộ chọn con cụ thể, nhưng nó giữ sự kiện từ việc truyền đến các trình xử lý khác.

0

Bạn có thể phải chỉ định công cụ chọn bắt đầu ... không chắc chắn bộ chọn cơ sở được giả định.

events: { 
    'click #parent > a': 'toggle' 
} 

đã không cố gắng này, nhưng nó có thể làm việc.

+0

không, phụ huynh cũng nhận được sự kiện – chacham15

+0

để biết, tôi sẽ tưởng tượng điều này có thể liên quan đến phân tích cú pháp sự kiện của họ. – Seth

+0

ohh, có thể là sự kiện được tạo ra trong chế độ xem con, nhưng được chuyển cho phụ huynh? Làm cách nào để lọc bộ lọc này? – chacham15

1

e.stopImmediatePropagation() rất tiện lợi nếu bạn không kích hoạt sự kiện nào khác khi bạn nhấp vào phần tử cụ thể đó. Những gì bạn nên làm khác là so sánh e.currentTarget với phần tử bạn muốn chọn. I E.

events: { 
    'click a': 'toggle' 
} 

toggle: function(e) { 
    if (e.currentTarget == this.$el.find('a')[0]) { 
     ... 
    } 
} 

Bằng cách đó, nếu bạn có một cái nhìn mẹ cũng bắn một sự kiện khi liên kết được nhấp, nó sẽ không được ngừng lại bởi e.stopImmediatePropagation();

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