У меня есть следующий 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
вручную?
Update:
Используя ответ damienc88 «S я сделал следующие изменения внутри 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')
снаружи теперь работает как положено.