我正在尝试从复合视图中选择一个元素,但我无法使itemView模型事件起作用。
这是mi代码的一部分
var resultItemView = Marionette.ItemView.extend({
template: _.template('<b><%=institucionEducativaNombre%></b>'),
events: {
'click': 'onClick'
},
onClick: function (evt) {
console.log(this.model.toJSON());
this.model.set('institucionEducativaNombre', 'asdf');
console.log(this.model.toJSON());
}
});
var resultView = Marionette.CompositeView.extend({
template: _.template(''),
childView: resultItemView,
modelEvents: {
'change': 'pickSchool'
},
collectionEvents: {
'add': 'added'
},
pickSchool: function () {
console.log('This should be triggered');
console.log(evt, args);
},
added: function (evt) {
console.log('new added');
}
});
提前致谢。
答案 0 :(得分:2)
没关系,似乎modelEvents属性用于绑定视图模型中的事件而不是它所拥有的集合中的模型。
https://github.com/marionettejs/backbone.marionette/blob/master/src/marionette.view.js#L116
有了这个,我把事件改为听,它按照我的意愿运作。
var resultItemView = Marionette.ItemView.extend({
template: _.template('<b><%=institucionEducativaNombre%></b>'),
events: {
'click': 'onClick'
},
onClick: function (evt) {
this.model.collection.trigger('select', this.model);
}
});
var resultView = Marionette.CompositeView.extend({
template: _.template(''),
childView: resultItemView,
collectionEvents: {
'add': 'added',
'select': 'pickSchool'
},
pickSchool: function (model) {
console.log('This should be triggered');
console.log(model.toJSON());
},
added: function (evt) {
console.log('new added');
}
});