简体   繁体   中英

Error on Mustache.render using pre-parsed templates

I get the error Object [object Array] has no method 'search' in mustache.js line 103.

I've created an object of templates when the page is ready:

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

I then have a json object from my server, the relevant part of which I'm passing into a rendering function.

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

I'm attempting to match up templates with models: the window.template keys matching the keys in my data object returned from my model. Since templates may contain other templates as partials, I'm passing the entire templates object back in at the end. I can confirm that I'm getting the model name I expect, and that it does properly match with a template.

I'm new to Mustache, so this is probably a simple fix. What am I missing?

Thanks

Without Mustache version I can only guess but it seems you are using version 0.7.3. If so then you are looking at wrong documentation ( "Pre-parsing and Caching Templates" in master branch ). And what you should be looking is "Compiled Templates" in docs for v0.7.3 .

So what you should be doing is

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

and your render() function

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;
}

Here is plunker to play with.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM