2015-01-23 4 views
0

트리거 및 이벤트 모두에 대해 동일한 이벤트 구성을 사용하여 마리오넷 뷰를 설정하면 트리거 만 해고되는 것 같습니다. 다음은 간단한 예제입니다 : .button을 클릭하여 show을 실행하고 select:something 이벤트를 트리거해야합니다. 그러나 이벤트 만 트리거합니다. Marionette trigger docsMarionette : 트리거와 이벤트에 동일한 이벤트 구성을 사용할 수 있습니까?

var MyView = Marionette.CompositeView.extend({ 
    ui: { 
    'button': '.button' 
    }, 

    triggers: { 
    'click .button': 'select:something', 
    }, 

    events: { 
    'click .button': 'show' 
    }, 

    show: function() { 
    // won't fire 
    } 
}); 

var view = new MyView({}); 
view.on('select:something', handleSelect); // will fire 

falsestopPropogation를 설정하면 도움이 될 것을 제안하지만 나를 위해 동작을 변경하지 않은 :

triggers: { 
    'click .button': { 
    event: "select:something", 
    preventDefault: true, 
    stopPropagation: false 
    } 
}, ... 

답변

1

Marionette.View의 delegateEvents 코드는 다음과 같습니다

// behavior events will be overriden by view events and or triggers 
    _.extend(combinedEvents, behaviorEvents, events, triggers, behaviorTriggers); 
    Backbone.View.prototype.delegateEvents.call(this, combinedEvents); 

해당 이벤트 해시가 _.extend에서 해시를 트리거하기 전에 있기 때문에 이벤트는 트리거에 의해 재정의됩니다. 다른 키 입력 이벤트를 사용하고 해시를 트리거 할 수 있습니다. 다음과 같은 코드 :

var viewtemplate = _.template('<button class="button show-btn">show</button>'); 

var MyView = Marionette.CompositeView.extend({ 
    template: viewtemplate, 
    triggers: { 
    'click .button': 'select:something', 
    }, 
    events: { 
    'click .show-btn': 'show' 
    }, 
    show: function() { 
    console.log('click .show-btn'); 
    } 
});