我不确定最终的实现方式,但基本要点是将方法参数插入字符串“template”。第一个例子,我可以做一个正则表达式替换但是有一些垮台,如果有必要,我愿意接受。第二个有点困难。如何从模板中获取名称并使用匹配的传递对象替换?谢谢你的帮助。
var myTemplate = 'Hello {name}'; // or something similar
var name = 'Bob';
function applyTemplate(tpl,str) {
//do stuff here to replace {name} with passed argument
}
var newStr = applyTemplate(myTemplate,name); //should return 'Hello Bob'
//Also this one
var myTemplate = 'Good {timeOfDay} {name}';
function applyTemplate(tpl,o) {
//simple objects only, don't need nested
}
var newStr = applyTemplate(myTemplate,{name:'Bob',timeOfDay:'morning'}); //should return 'Good morning Bob'
答案 0 :(得分:1)
如果您不需要额外的检查和验证,则只需将{key}
替换为value
,例如:
function applyTemplate(tpl,o) {
for(var key in o)
{
if(o.hasOwnProperty(key))// prevent iteration on any prototype inherited methods
tpl = tpl.replace('{'+key+'}',o[key]);
}
return tpl;
}
至于你简单的第一个applyTemplate
函数,因为你没有任何关于密钥应该是什么的概念,你可以使用正则表达式来替换遇到的第一个{...}
:
function applyTemplate(tpl,str) {
return tpl.replace(/{.*?}/,str);
}
然后,当然,您可以将这两个函数合二为一,根据参数的类型略有不同的功能:
function applyTemplate(tpl,o) {
switch(typeof o){
case 'object' :
for(var key in o)
{
if(o.hasOwnProperty(key))
tpl = tpl.replace('{'+key+'}',o[key]);
}
break;
case 'string' :
tpl = tpl.replace(/{.*?}/,o);
break;
default :
throw new Error('no valid parameters supplied');
}
return tpl;
}
这应该可以解决问题。如果您有兴趣,可以在jquery模板系统中取得高峰:http://api.jquery.com/jQuery.template/。
希望这会有所帮助。