messaging.js | |
---|---|
Messaging ViewManages rendering many views with a collection, | |
Requires | define(['facade','views/base','utils'], function (facade, BaseView, utils) {
var MessageView,
$ = facade.$,
_ = facade._,
debug = utils.debug; |
Constructor | MessageView = BaseView.extend({ |
Param {Object} | initialize: function(options) {
_.bindAll(this);
options = options || {};
this.display = (options.display && _.isFunction(options.display)) ? options.display : alert;
if(!options.collection) {
throw new Error('MessageView expected collection option');
}
this.collection.on('add', this.checkNew);
this.checkNew();
}, |
Method: | render: function() {
var mesg = this.model.get('message');
var btns = this.model.get('buttons');
this.display(mesg, btns);
this.model.set({
'state': 'displayed'
}, {
'silent': true
});
}, |
Method: | wrapCallback: function() {
var model = this.model;
var buttons = model.get('buttons');
_.each(buttons, function(button) {
var fn = _.wrap(button.callback, function(callback){
model.set({'state':'done'});
callback();
return callback;
});
button.callback = fn;
});
model.set({'buttons':buttons},{'silent':true});
}, |
Method: | checkNew: function() {
var newest = this.collection.find(function(message) {
return message.get('state') === 'new';
});
if (newest) {
this.model = newest;
this.wrapCallback();
this.render();
}
}
});
return MessageView;
});
|