2014-08-30 78 views
0

我想從複合視圖中單擊選擇一個元素,但是我無法讓itemView模型事件工作。Marionette modelEvents not firing

這裏是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'); 
    } 
}); 

預先感謝某些部分。

回答

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