2011-12-23 36 views
13

Tôi đang viết thành phần menu tab bằng cách sử dụng backbone.js làm khung MVC. Khi người dùng nhấp vào tab, thành phần sẽ chuyển đổi tab (hoạt động nội bộ), nhưng sau đó tôi muốn người nghe của thành phần phản hồi hành động được liên kết với sự kiện. Ý tưởng đằng sau điều này là tôi đang trừu tượng hóa các nhấp chuột khác nhau thành các hành động cụ thể. Ví dụ, mô hình cho mỗi tab là một hash với cấu trúc sau:Backbone.js - sử dụng trình kích hoạt để kích hoạt sự kiện và truyền dữ liệu

{ 
    label : <string>, 
    actionCommand : "save", 
    tabClass : <string> 
} 

Sự kiện này sẽ được kích hoạt sẽ được gọi là "hành động", vì vậy người nghe sẽ đáp lại "hành động", nhưng sau đó sẽ chuyển tiếp cụ thể chỉ huy. Ví dụ:

this.trigger("action", {actionCommand: "save"}); 

Người nghe lần lượt sẽ xử lý sự kiện tương tự như sau:

handleAction : function(event) { 
    if (event.actionCommand == "save") { 
    ...do something... 
    } 

}

Đây có phải là có thể? Tôi không thể thu thập dữ liệu này từ tài liệu. Cảm ơn trước vì bất kỳ thông tin chi tiết nào bạn có thể cung cấp.

Trả lời

30

Có, có thể với Backbone.

Bạn có thể sử dụng mô-đun Sự kiện để cho phép đối tượng có khả năng liên kết và kích hoạt sự kiện được đặt tên tùy chỉnh.

Trong trường hợp của bạn, bạn sẽ muốn thêm mô-đun Sự kiện vào đối tượng thành phần trình đơn của mình. Nếu đối tượng này là Mô hình xương sống, thì nó đã có mô-đun Sự kiện. Nếu không, sau đó bạn có thể thêm nó với đoạn mã sau

_.extend(MenuComponent, Backbone.Events); 

Sau đó, người nghe có thể đăng ký như thế này

MenuComponent.bind("action", this.handleAction, this); 

Và bạn có thể kích hoạt các sự kiện như bạn đã đề cập

this.trigger("action", {actionCommand: "save"}); 
+0

đẹp ! Băm có được sao chép vào đối tượng sự kiện không? –

+0

Hàm băm được chuyển tới hàm gọi lại, trong trường hợp này là handleAction – Paul

+0

Và điều gì về truyền dữ liệu .. ?? Điều này là để truyền * action * chỉ ... –

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