考虑以下 HTML 片段,其中包含一系列占位符(用单个花括号括起来)。
什么是用等效变量替换占位符的最佳方法?我知道这是一种基本形式的模板处理,但我不想使用Handlebars或类似的第三方组件。除了占位符本身,我也不想在模板中添加任何具体内容。如果需要更改占位符分隔符以解决与其他库的冲突等问题,则更改分隔符也可以。
这是一个JS片段,我们正在使用它来解析占位符。它可以正常工作,但我不确定它是否是良好的实践,它肯定不是特别优雅!不用说我们想要避免使用eval(),因为数据源是第三方提供的。
这是jQuery插件的一部分,因此任何jQuery特定的代码都可以使用。
谢谢。
<div>
{ user.name }
{ user.username }
{ user.address.line1 }
{ user.address.line2 }
</div>
还有一个长这样的JavaScript对象:
var user = {
name: 'Bob Foo',
username: 'bobfoo',
address : {
line1: '10 Foo Street',
line2: 'Footown'
}
};
什么是用等效变量替换占位符的最佳方法?我知道这是一种基本形式的模板处理,但我不想使用Handlebars或类似的第三方组件。除了占位符本身,我也不想在模板中添加任何具体内容。如果需要更改占位符分隔符以解决与其他库的冲突等问题,则更改分隔符也可以。
这是一个JS片段,我们正在使用它来解析占位符。它可以正常工作,但我不确定它是否是良好的实践,它肯定不是特别优雅!不用说我们想要避免使用eval(),因为数据源是第三方提供的。
var template = $(self.options.templateId).html();
for (var k in user) {
if (!user.hasOwnProperty(k)) continue;
if(k == 'address'){
for (var k in user.address) {
if (!user.address.hasOwnProperty(k)) continue;
var needle = "{ user.address." + k + " }";
template = template.replace(needle, user.address[k]);
}
}else{
var needle = "{ user." + k + " }";
template = template.replace(needle, user[k]);
}
}
这是jQuery插件的一部分,因此任何jQuery特定的代码都可以使用。
谢谢。