2012-10-29 28 views
14

Trong Backbone rối, bạn có thể làm những việc cực kỳ tương tự với trigger và các sự kiện:Sự khác nhau giữa các yếu tố kích hoạt và sự kiện trong xương sống là gì?

triggers:

return Marionette.Layout.extend({ 
    triggers: { 
     'click .something': 'view:handleClickSomething' 
    }, 

    initialize: function(){ 
     this.bindTo(this, 'view:handleClickSomething', this.handleClickSomething); 
    }, 

    handleClickSomething: function(){} 
} 

vs sự kiện:

return Marionette.Layout.extend({ 
    events: { 
     'click .something': 'view:handleClickSomething' 
    }, 

    handleClickSomething: function(ev){} 
} 

Các sự kiện cách có vẻ như là một cách nhanh hơn dễ dàng hơn và cũng giúp dễ dàng nhận được sự kiện thực sự hơn (vì nó được tự động chuyển). Có lý do nào để sử dụng cái này với cái kia không? Trường hợp sử dụng dự định của họ là gì? Gặp khó khăn trong việc tìm kiếm nhiều thông tin về trực tuyến này (ngoài việc cố gắng tìm kiếm nguồn được chú thích) ...

(Tôi chỉ phát hiện ra phương pháp sự kiện, và cho đến bây giờ đã sử dụng trình kích hoạt cho mọi thứ vì tôi nghĩ đó là cách duy nhất)

Trả lời

15

Ví dụ đầu tiên của bạn là việc sử dụng trình kích hoạt không hợp lệ. Trình kích hoạt có nghĩa là các lối tắt để kích hoạt sự kiện từ chế độ xem, để đối tượng bên ngoài có thể nắm bắt sự kiện, chứ không phải chế độ xem đã kích hoạt sự kiện.

http://lostechies.com/derickbailey/2012/05/15/workflow-in-backbone-apps-triggering-view-events-from-dom-events/

+3

Điều này dường như không thực sự trả lời các câu hỏi như được hỏi, ví dụ: "Trình kích hoạt là ___, trong khi sự kiện là ___." Rõ ràng với tôi rằng một kích hoạt kích hoạt một sự kiện, nhưng như vậy có thể là một sự kiện, vì vậy câu trả lời này đã không làm rõ bất cứ điều gì. – meetalexjohnson

4

Nếu chúng ta nghĩ cả eventstriggers như các đối tượng Javascript, thì đây là sự khác biệt:

tổ chức sự kiện ví dụ:

events: { 
    'click hi': 'alertTitle', 
}, 

alertTitle: function() { 
    alert('Title!!'); 
} 

Trong mỗi sự kiện, chìa khóa ('click h1') luôn là sự kiện DOM và bộ chọn jQuery, giá trị ('alertTitle') luôn là thứ e tên của hàm gọi lại, hiện có bên trong chế độ xem.

kích hoạt Ví dụ:

triggers: { 
    'click h1': 'alert:title' 
}, 

Trong mỗi cò, chìa khóa vẫn là một sự kiện DOM và một selector jQuery, nhưng giá trị ('alert:title') luôn tên của một sự kiện mới mà bạn muốn để kích hoạt. Trình xử lý sự kiện đó có thể được định nghĩa ở bất kỳ đâu, không nhất thiết phải trong chế độ xem hiện tại.

Trigger là hữu ích khi:

  1. Bạn muốn sự kiện DOM của bạn để bắn một sự kiện rối, thay vì gọi một hàm callback;
  2. Bạn muốn trình xử lý sự kiện Marionette của bạn ở một nơi nào đó bên ngoài chế độ xem hiện tại, ví dụ như chế độ xem gốc. Trong trường hợp này, cha mẹ của chế độ xem này có thể có chức năng onChildviewAlertTitle() để xử lý sự kiện alert:title này.
+1

Tôi nhận ra rằng kích hoạt 'alert: title' luôn kích hoạt phương thức' onAlertTitle' (viết hoa và thêm tiền tố 'on'). Nó có nghĩa là, 'trigger' không chỉ phơi bày sự kiện với view cha, mà còn cố gắng thực thi mentod riêng. Và cách thức oppozite - 'sự kiện: {'nhấn hi': 'alert: title'}' - sẽ làm tương tự. – iegik

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