rob*_*lls 5 html javascript jquery templating
考虑这样一个 HTML 片段,其中包含一系列占位符(包含在单个大括号内)。
<div>
{ user.name }
{ user.username }
{ user.address.line1 }
{ user.address.line2 }
</div>
Run Code Online (Sandbox Code Playgroud)
和一个如下所示的 JavaScript 对象:
var user = {
name: 'Bob Foo',
username: 'bobfoo',
address : {
line1: '10 Foo Street',
line2: 'Footown'
}
};
Run Code Online (Sandbox Code Playgroud)
用等效变量替换占位符的最佳方法是什么?我很欣赏这是模板的基本形式,但我不希望对车把或类似的东西有第三方依赖。除了占位符本身之外,我也不想向模板添加任何细节。如果有特定需要与另一个库发生冲突,则将占位符定界符更改为其他内容会很好。
这是来自一个较大文件的 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]);
}
}
Run Code Online (Sandbox Code Playgroud)
这是 jQuery 插件的一部分,因此任何 jQuery 特定代码都可以。
谢谢
小智 0
如果我必须这样做,我会使用 AngularJS。
对于将数据绑定到 HTML,您可以使用AngularJS。
对于未来: AngularJS 使用双括号 {{ }},如果您使用单括号至关重要,您可以在 AngularJS 脚本中更改它。
var sampleApp = angular.module('YourApp', [], function($interpolateProvider) {
$interpolateProvider.startSymbol('{');
$interpolateProvider.endSymbol('}');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2862 次 |
| 最近记录: |