使用预解析模板在Mustache.render上出错

时间:2013-12-15 01:35:00

标签: javascript partial mustache

我在mustache.js第103行中收到错误Object [object Array] has no method 'search'

当页面准备就绪时,我已经创建了一个模板对象:

window.templates = {};
$("script[type='text/mustache']").each(function(){
    window.templates[this.id] = Mustache.parse(this.innerHTML);
});

然后我从我的服务器获得了一个json对象,我将其传递给渲染函数。

var render = function(data){
    var content = "";
    for (n in data){
        content += Mustache.render(window.templates[n], data[n], window.templates);
    }
    return content;
}

我正在尝试将模板与模型匹配:window.template键与我的模型返回的数据对象中的键匹配。由于模板可能包含其他模板作为partials,我最后将整个模板对象传回。我可以确认我得到了我期望的模型名称,并且它与模板匹配得恰到好处。

我是Mustache的新手,所以这可能是一个简单的修复。我错过了什么?

由于

1 个答案:

答案 0 :(得分:1)

没有Mustache版本我只能猜测,但似乎你使用的是0.7.3版本。如果是这样,那么您正在查看错误的文档("Pre-parsing and Caching Templates" in master branch)。你应该看的是"Compiled Templates" in docs for v0.7.3

所以你应该做的是

window.templates = {};
$("script[type='text/mustache']").each(function() {
    window.templates[this.id] = Mustache.compilePartial(this.id, this.innerHTML);
});

和您的render()功能

function render(data) {
    var content = "";
    for(var n in data) {
        // don't pass partials. internal cache will be used
        content += window.templates[n](data[n]);
    }
    return content;
}

以下是plunker