2012-10-29 3 views
14

, 당신은 트리거 및 이벤트와 매우 비슷한 일 수행 할 수 있습니다백본에서 트리거와 이벤트의 차이점은 무엇입니까? 백본 마리오네트에서

을 트리거 :

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

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

    handleClickSomething: function(){} 
} 

대 이벤트 :

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

    handleClickSomething: function(ev){} 
} 

이벤트의 방법은 빠르고 쉬운 방법처럼 보인다 실제 이벤트 자체에 쉽게 접근 할 수있게 해줍니다 (자동으로 전달되므로). 다른 것을 사용하는 이유가 있습니까? 의도 한 유스 케이스는 무엇입니까? 이 온라인에 대한 많은 정보를 찾는 데 어려움이 있습니다. (주석이 달린 소스를 알아내는 것 이외에) ...

(단지 이벤트 메서드를 발견했습니다. 지금까지는 모든 것이 트리거라고 생각했습니다. 유일한 방법)

답변

15

첫 번째 예는 트리거를 잘못 사용하는 것입니다. 트리거는 뷰에서 이벤트를 트리거하기위한 바로 가기이기 때문에 외부 오브젝트가 이벤트를 트리거 한 뷰가 아닌 이벤트를 잡을 수 있습니다.

이벤트 예 : 각 이벤트에

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

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

, 키 ('click h1' 우리는 모두 events과 자바 스크립트 객체로 triggers을 생각한다면

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

+3

"실제로 트리거는 ___ 인 반면 이벤트는 ___입니다."와 같이 질문에 실제로 답하는 것 같지 않습니다. 트리거가 이벤트를 트리거하지만 이벤트도 발생할 수 있으므로이 대답으로는 아무 것도 명확하게 알 수 없습니다. – meetalexjohnson

4

는 여기에 차이입니다)는 항상 DOM 이벤트이며 jQuery 선택 자입니다. 값 ('alertTitle')은 항상 th입니다. 뷰 내에 존재하는 콜백 함수의 이름.

트리거 예 : 각 트리거에서

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

는, 키는 여전히 당신이 원하는 새로운 이벤트의 항상 이름는 DOM 이벤트와 jQuery를 선택, 하지만 값 ('alert:title')입니다 방아쇠를 당긴다. 해당 이벤트 핸들러는 현재 뷰가 아닌 모든 위치에서 정의 할 수 있습니다.

  1. 당신은 당신의 DOM 이벤트 대신 콜백 함수를 호출하는 마리오네트 이벤트가 발생하려면, 다음의 경우

    트리거 도움이됩니다

  2. 마리오네트 이벤트 처리기가 현재보기 외부 (예 : 상위보기)에 있어야합니다. 이 경우이 뷰의 부모는 alert:title 이벤트를 처리 할 수있는 onChildviewAlertTitle() 함수를 가질 수 있습니다.
+1

'alert : title' 트리거는 항상'onAlertTitle' 메소드를 시작한다는 것을 알고 있습니다 ('on'접두어를 대문자로 추가합니다). 즉, '트리거'는 부모보기에 이벤트를 표시 할뿐만 아니라 자체 mentod를 실행하려고합니다. 그리고 oppozite way -'events : { 'click hi': 'alert : title'}'은 똑같이 할 것입니다. – iegik