blob: f8ae4e3215af8ec12f161ce0b05816c85ac12581 [file] [log] [blame]
/**
* @file 前端模板(为便于管理,模板使用均从此入口,不直接调用etpl)
* @author sushuang(sushuang@baidu.com)
*/
define(function (require) {
var etpl = require('etpl');
var dtLib = require('./lib');
var tpl = {};
etpl.config({
commandOpen: '{{',
commandClose: '}}',
defaultFilter: 'ob'
});
/**
* 此filter兼容了ko的subscribable
* 并且也做了html转义
*
* @param {string...} 参数可任意顺序输入
* 如 ${*name|ob('raw', 'void')和 ${*name|ob('void', 'raw')等效
* 参数有:
* 'raw'表示不encodeHTML(默认会进行encode)
* 'null'表示不把null或undefined转成空字符串(默认会转换)
*/
etpl.addFilter('ob', obFilter);
function obFilter(val) {
var useRaw = false;
var transNull = false;
for (var i = 1; i < arguments.length; i++) {
arguments[i] === 'raw' && (useRaw = true);
arguments[i] === 'null' && (transNull = true);
}
if (val == null && !transNull) {
val = '';
}
if (dtLib.obTypeOf(val)) {
val = val();
}
val = String(val);
return useRaw ? val : dtLib.encodeHTML(val);
}
/**
* 此filter是为了显示 datasource-path (dsp)
* 如 ${name|dsp}
*/
etpl.addFilter('dsp', dspFilter);
function dspFilter(val) {
if (val == null) {
val = '';
}
// 暂用的现实策略
return String(val).replace(/^option\./, '');
}
/**
* 一般使用方法:
* tpl.render(
* 'someTarget',
* {... },
* require('tpl!./some.tpl.html')
* );
* 或者:
* tpl.render('someTarget', {... });
* 而众多的require('tpl!...')会在edp build时合并成一个文件。
*
* @public
* @param {string} tplTarget
* @param {Ojbect=} model 渲染时使用的数据
* @param {string=} tplString 如果talTarget找不到,则编译此string。
* @return {string} 渲染完的string。
*/
tpl.render = function (tplTarget, model, tplString) {
if (!etpl.getRenderer(tplTarget) && tplString) {
etpl.compile(tplString);
}
return etpl.render(tplTarget, model || {});
};
return tpl;
});