Initial commit
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
var _ = require('underscore');
|
||||
var Backbone = require('backbone');
|
||||
var Mustache = require('mustache');
|
||||
var log = require('cdb.log');
|
||||
|
||||
/**
|
||||
* template system
|
||||
* usage:
|
||||
var tmpl = new Template({
|
||||
template: "hi, my name is {{ name }}",
|
||||
type: 'mustache' // undescore by default
|
||||
});
|
||||
console.log(tmpl.render({name: 'rambo'})));
|
||||
// prints "hi, my name is rambo"
|
||||
|
||||
you could pass the compiled tempalte directly:
|
||||
|
||||
var tmpl = new Template({
|
||||
compiled: function() { return 'my compiled template'; }
|
||||
});
|
||||
*/
|
||||
var Template = Backbone.Model.extend({
|
||||
|
||||
initialize: function () {
|
||||
this.bind('change', this._invalidate);
|
||||
this._invalidate();
|
||||
},
|
||||
|
||||
url: function () {
|
||||
return this.get('template_url');
|
||||
},
|
||||
|
||||
parse: function (data) {
|
||||
return {
|
||||
'template': data
|
||||
};
|
||||
},
|
||||
|
||||
_invalidate: function () {
|
||||
this.compiled = null;
|
||||
if (this.get('template_url')) {
|
||||
this.fetch();
|
||||
}
|
||||
},
|
||||
|
||||
compile: function () {
|
||||
var tmplType = this.get('type') || 'underscore';
|
||||
var fn = Template.compilers[tmplType];
|
||||
if (fn) {
|
||||
return fn(this.get('template'));
|
||||
} else {
|
||||
log.error("can't get rendered for " + tmplType);
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
/**
|
||||
* renders the template with specified vars
|
||||
*/
|
||||
render: function (vars) {
|
||||
var c = this.compiled = this.compiled || this.get('compiled') || this.compile();
|
||||
var rendered = c(vars);
|
||||
return rendered;
|
||||
},
|
||||
|
||||
asFunction: function () {
|
||||
return _.bind(this.render, this);
|
||||
}
|
||||
|
||||
}, {
|
||||
compilers: {
|
||||
'underscore': _.template,
|
||||
'mustache': typeof (Mustache) === 'undefined'
|
||||
? null
|
||||
// Replacement for Mustache.compile, which was removed in version 0.8.0
|
||||
: function compile (template) {
|
||||
Mustache.parse(template);
|
||||
return function (view, partials) {
|
||||
return Mustache.render(template, view, partials);
|
||||
};
|
||||
}
|
||||
},
|
||||
compile: function (tmpl, type) {
|
||||
var t = new Template({
|
||||
template: tmpl,
|
||||
type: type || 'underscore'
|
||||
});
|
||||
return _.bind(t.render, t);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = Template;
|
||||
Reference in New Issue
Block a user