js使用json渲染了很多html

时间:2012-10-24 11:00:06

标签: javascript templates

我打电话给我的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;
    }

3 个答案:

答案 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);