15. @subedinishan
Example - message queue
var VmsManager = new Marionette.Application({
onStart: function() {
// Start a message queue
this.messageQueue = new this.Entities.Messages();
this.messageRegion.show(new this.VmsApp.Message.Messages({
collection: this.messageQueue
}));
onMessage: function(options) {
this.messageQueue.push(new this.Entities.Message(options));
},
});
!!
Entities.Message = Backbone.Model.extend({
defaults: {
type: 'info',
timeout: 2000,
isDismissible: true,
message: 'Nothing to see here'
}
});
16. @subedinishan
Message - view
Message.Message = Marionette.ItemView.extend({
template: 'message',
className: function() {
var val = ' alert col-md-12';
val += ' alert-' + this.model.get('type');
if (this.model.get('isDismissible')) {
val += ' alert-dismissible ';
}
return val;
},
onShow: function() {
if (this.model.get('timeout') !== 0) {
// Model not used after flash message display
// so, set up a timeout for cleanup
_.delay(_.bind(this.cleanup, this), this.model.get('timeout'));
}
},
cleanup: function() {
var timeout = this.model.get('timeout');
this.$el.fadeOut(timeout/2);
// We rely on the fadeOut successfully completing in timeout*2 time
_.delay(_.bind(this.model.destroy, this.model), timeout*2);
_.delay(_.bind(this.destroy, this), timeout*2);
}
});
Message.Messages = Marionette.CollectionView.extend({
childView: Message.Message
});
22. @subedinishan
Modal - inside ItemView
this.confirmationModal = new BootstrapDialog({
title: 'Are you sure?',
message: 'Do you really want to delete ' + this.model.get('hostname') + '?',
type: BootstrapDialog.TYPE_DANGER,
buttons: [{
label: 'DELETE',
action: function(dialog){
parentScope.model.destroy({
success: function(model, response) {
VmsManager.Common.Notifier.success(response, {
fail: "VM deletion failed with response: " + response.message,
success: "Delete VM successful",
undef:"Delete VM came back with response" + JSON.stringify(response)
});
},
error: function(model, response) {
VmsManager.Common.Notifier.error(response, {
error: "VM Deletion failed with response: " + JSON.stringify(response)
});
}
});
dialog.close();
}
}],
onhidden: function() {
VmsManager.trigger('streamer:show');
VmsManager.trigger("vm:destroy");
VmsManager.trigger("log:subscribe", Etsy.data.username + "-delete");
}
23. Marionette JS
• active and helpful community
• great upgrade support
• adopted in the company
• plug and play - able to glue things together
• CollectionView
@subedinishan
24. @subedinishan
Future of Marionette @ Etsy
• Behaviors
• Skeletor - build once, use everywhere
• Migration
• Adoption