我有以下ItemView
其被包裝在裏面CollectionView
:如何手動調用ItemView函數?
define(deps, function($, _, Backbone, CountriesTemplate, Globals) {
return Backbone.Marionette.CollectionView.extend({
tagName: 'ul',
className: 'unstyled countries',
itemView: Backbone.Marionette.ItemView.extend({
tagName: 'li',
template: CountriesTemplate,
events: {
'change': 'toggleState'
},
triggers: {
'click': 'toggleState'
},
toggleState: function() {
var index = Globals.defaultCountries.indexOf(this.model.id);
index === -1 ? Globals.defaultCountries.push(this.model.id) : Globals.defaultCountries.splice(index, 1);
this.model.set('checked', !this.model.get('checked'));
}
})
});
});
集合被結合到複選框列表和它被手動綁定到SVG圈元件,其代表的國家。檢查/取消選中複選框不成問題,並且應該調用toggleState
。當嘗試手動觸發事件時單擊一個svg圈元素時出現問題。
試圖手動觸發點擊事件代碼:
// country is a "model"
checkbox.prop('checked', true);
// Changes the checked attribute but does not call toggleState.
country.set('checked', true);
// Nothing happens here.
country.trigger('click');
那麼,什麼是手動調用toggleState
正確的方法是什麼?
更新:
使用damienc88的答案,我做內部itemView
以下修改,使觸發器工作。
itemView: Backbone.Marionette.ItemView.extend({
tagName: 'li',
template: CountriesTemplate,
events: {
'change': 'toggleState'
},
initialize: function() {
this.listenTo(this.model, 'toggleState', this.toggleState);
},
toggleState: function() {
// Code.
}
})
從外面打電話model.trigger('toggleState')
現在工作,因爲它應該。