木偶模型事件没有开火

时间:2014-08-30 18:05:13

标签: events backbone.js marionette

我正在尝试从复合视图中选择一个元素,但我无法使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');
    }
});

提前致谢。

1 个答案:

答案 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');
    }
});