我打电话给我的api并返回json对象,然后它会生成很多满足内容的div。但我继续使用连接来插入我的对象属性。有更好的方法吗?
$.each(JSON, function(key, value) {
var content = display_mention(value);
$("#mentions_container").append(content);
});
function display_mention(mention) {
//this str will be much more complex and use lots of concatenation
var str = "<div data-id='" + mention.id +"'> " + mention.texto + "</div></br>";
return str;
}
答案 0 :(得分:1)
有一种更好的方法,它被称为客户端模板。
看看mustache.js https://github.com/janl/mustache.js 或handlebars.js http://handlebarsjs.com/
答案 1 :(得分:1)
我喜欢用这个人作为微模板引擎:
String.prototype.tpl = function(o) {
return this.replace(/{([^{}]*)}/g,
function(a, b) {
var r = o[b];
if (!o[b]) return "";
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
var data = {
title: 'C pocket reference',
type: 'PDF Document',
tag: 'programming',
created_at: '5.31.2010'
}
var html = '<tr><td>{title2}</td><td>{type}</td><td><a href="tags/{tag}">{tag}</a></td><td>{created_at}</td></tr>'.tpl(data);
这很简单,但它会使你的代码更清晰。
但你应该定义一些更严肃的解决方案,例如:jQuery templates(正确使用jQuery)或从这里选择其他一些http://microjs.com/#templating
答案 2 :(得分:0)
如果您不需要更大的引擎,可以编写一个简单的模板函数。
function template(str, context) {
return str.replace(/\{([a-z]+)\}/g, function(match, key) {
return context[key];
});
}
你只需用这样的对象上下文来调用它:
template("<div data-id='{id}'> {texto}</div></br>", mention);