The View
, CollectionView
and Behavior
can bind to events that occur on attached models and
collections - this includes both standard backbone-events and custom events.
Event handlers are called with the same arguments as if listening to the entity directly and called with the context of the view instance.
For example, to listen to a model's events:
import { View } from 'backbone.marionette';
const MyView = View.extend({
modelEvents: {
'change:attribute': 'onChangeAttribute'
},
onChangeAttribute(model, value) {
console.log('New value: ' + value);
}
});
The modelEvents
attribute passes through all the arguments that are passed
to model.trigger('event', arguments)
.
The modelEvents
attribute can also take a
function returning an object.
You can also bind a function callback directly in the modelEvents
attribute:
import { View } from 'backbone.marionette';
const MyView = View.extend({
modelEvents: {
'change:attribute': () {
console.log('attribute was changed');
}
}
});
Collection events work exactly the same way as modelEvents
with their own collectionEvents
key:
import { View } from 'backbone.marionette';
const MyView = View.extend({
collectionEvents: {
sync: 'onSync'
},
onSync(collection) {
console.log('Collection was synchronised with the server');
}
});
The collectionEvents
attribute can also take a
function returning an object.
Just as in modelEvents
, you can bind function callbacks directly inside the
collectionEvents
object:
import { View } from 'backbone.marionette';
const MyView = View.extend({
collectionEvents: {
'update'() {
console.log('the collection was updated');
}
}
});
If your view has a model
and collection
attached, it will listen for events
on both:
import { View } from 'backbone.marionette';
const MyView = View.extend({
modelEvents: {
'change:someattribute': 'onChangeSomeattribute'
},
collectionEvents: {
'update': 'onCollectionUpdate'
},
onChangeSomeattribute() {
console.log('someattribute was changed');
},
onCollectionUpdate() {
console.log('models were added or removed in the collection');
}
});
In this case, Marionette will bind event handlers to both.