2013-05-24 12 views
8

Tôi có một CompositeView cho một bảng. Tôi có các trình kích hoạt được đặt trong ItemView con cho từng hàng ...Trình kích hoạt ItemView có gây ra bong bóng không?

var TableRow = Marionette.ItemView.extend({ 
    tagName: "tr", 
    template: _.template($(TableTemplates).filter('#tableRow').html()), 
    triggers: { 
     "click td": "click:td" 
    } 
}); 

Trình kích hoạt có phải bong bóng lên đến CompositeView gốc không?

Từ the docs ...

Tiếp cận được những [quan điểm, tính chất mô hình, và tập hợp các quan điểm cho rằng kích hoạt sự kiện] cho phép linh hoạt hơn trong việc xử lý các sự kiện từ nhiều quan điểm. Ví dụ: điều khiển tab hoặc tiện ích mở rộng/thu gọn chẳng hạn như thanh bảng điều khiển có thể kích hoạt cùng một sự kiện từ nhiều chế độ xem khác nhau và được xử lý bằng một hàm duy nhất.

Không phải "hàm đơn" nằm trong CompositeView gốc sao cho nó có thể phản ứng với trình kích hoạt từ bất kỳ ItemView con nào của nó? Làm thế nào để CompositeView lắng nghe kích hoạt ItemView?

Cảm ơn

Trả lời

14

Có, chúng sẽ bong bóng lên.

Điều duy nhất có ý là khi một ItemView được gọi từ một CompositeView hoặc CollectionView, mà kích hoạt sẽ có itemview prepended trong tên, như vậy:

click:td sẽ được lắng nghe trong CompositeView như itemview:click:td

chuỗi Điều đó có thể được thay đổi như thế này:

var CV = Marionette.CollectionView.extend({ 
    itemViewEventPrefix: "some:prefix" 
}); 

Vì vậy, kích hoạt của bạn sẽ some:prefix:click:td

EDIT: Trong các phiên bản mới hơn (không chắc chắn về các phiên bản bắt đầu), tiền tố itemview đã được thay đổi để childview

Thông tin thêm ở đây:

Marionette docs

+1

gì nếu bạn muốn có CompositeView làm cho tất cả các con của nó (ItemViews) lắng nghe một trong những sự kiện của nó? (Vì vậy, ngược lại với việc phụ huynh lắng nghe các em) – Johannes

+1

bạn có thể vui lòng cho biết câu trả lời của bạn làm thế nào tôi có thể nghe sự kiện đó? –

+0

@SandipArmalPatil Tôi không thể có được điều này làm việc từ các sự kiện hoặc itemEvents băm, vì vậy cuối cùng tôi chỉ cần đặt sau đây trong chức năng khởi tạo của tôi: this.listenTo (this, "itemview: whatever", fn); – jackocnr