Mustache.js对象#<document>没有方法'search'</document>

时间:2012-12-22 16:42:07

标签: javascript template-engine mustache

我使用mustache.js作为我的客户端模板解决方案,但我遇到了一个问题,我不知道为什么会发生这种情况:

首先,这是我的模板:

<ul>
    {{#steps}}
    <li>
        <a href="{{url}}">
            <div class="step_visual {{step_status}}">
                <span class="step_description">{{description}}</span>
            </div>
        </a>
    </li>
    {{/steps}}
</ul>

这是我试图传入的json对象:

var view = {
    "steps": [
        {
            "url": "complete_profile",
            "step_status": "done",
            "description": "Complete Proflie"
        },
        {
            "url": "complete_form1",
            "step_status": "active",
            "description": "Submission of Form 1"
        }
    ]
}

我尝试运行此脚本以在我的应用程序中将其呈现出来

var content = Mustache.render(template, view);
$(target).html(content).hide().fadeIn();

其中template =上面的模板| view =视图对象 而target是我希望更改内容的html元素

让我感到满意的是,当我的模板看起来像

时效果很好
{{#steps}}
    {{url}}
    {{description}}
    {{step_status}}
{{/steps}}

或者我的模板没有任何可循环的内容。

可能是什么错误?你认为这是一个小胡子吗?

修改 正如我所见,代码有效,

我调用函数的方式会出现问题吗?

tmplReplaceContent : function(json, tmpl, target) {
    var regex = new RegExp("\{{[a-zA-Z\.\_]*\}}"),
    view = '';
    function setOutput(template) {
        var content = Mustache.render(template, view);
        $(target).html(content).hide().fadeIn();
    }
    function doJSON(json) {
        view = json;
        if(!regex.test(tmpl)){
            /* get mustache tmpl from the path */
            $.get(msi.vars.tmpl_url + tmpl + '.mustache', setOutput);
        } else {
            setOutput(tmpl);
        }
    }
    /* json -> check if object */
    if (typeof json === 'object') {
        doJSON(json);
    } else {
        /* getJSON from the path */
        $.getJSON(msi.vars.base_url + json, doJSON);
    }
}

1 个答案:

答案 0 :(得分:4)

我从未感受到这种轻松的感觉,因为我已经自己解决了我的问题,首先感谢Tomalak继续观看我的评论并帮助我解决问题。

如果我继续使用console.logging的话,我可以更早地解决问题,但我停了下来。

我注意到的一件事是$.get函数给了我#<Document>,这几乎是一个对象,我之前可以推断出响应是一个对象,从我的标题看问题显然它正在返回一个物体。

那么为什么不添加dataType属性?

function doJSON(data){
    dataSource = data;
    if (!regex.test(tpl)) {
        $.get(msi.vars.tmpl_url + tpl + '.mustache', render, 'text'); // see here
    } else {
        render(tpl);
    }
}

这最终解决了这个问题。