mustache.js - 使用$ get()获取外部模板数据的问题

时间:2014-06-11 08:47:33

标签: javascript jquery jquery-mobile mustache

js和我使用$ get()方法获取外部模板,如下所示

function open_device_player(device_id)   
{
        var device_data={
                device_id:device_id
            };
        var n;
        $.get('js/temp.html', function(template, textStatus, jqXhr) {
                 n=Mustache.render($(template).filter('#pageTpl').html(), device_data);
                alert("inside get: "+n);
       });
        alert("outside get: "+n);
        $("body").append(n);

    }
    $( ":mobile-pagecontainer" ).pagecontainer( "change", "#videodiv_"+device_id );
    return false;
}

这是我的模板文件temp.html

<script id="pageTpl" type="text/template">
    <div data-role='page' id='videodiv_{{device_id}}'>
        <div data-role=header>
            <h1> Device Page </h1>

        </div>
        <div data-role=content>
            <img id='vid_{{device_id}}' src='http://localhost/mobilestreamvideo/mjpg/{{device_id}}' width='320'>
        </div>
    </div>
</script>

我的问题是,我无法使用可变数据 n 支出$ get()块,当我使用提醒显示 n < / strong>显示第一个外部警报,然后在$ get()块内显示警报。

1 个答案:

答案 0 :(得分:1)

这是因为 $。get ,如 $ .ajax 是异步调用。代码之后它不会等待它完成,这就是为什么在 $。获取之前触发 $。get 之外的警报。基本上$ .get调用将触发,其余代码将继续工作,当$ .get完成时它将触发其内部回调函数。

您需要在 $。获取电话中添加新内容。

如果您确实需要使其同步,则需要使用 $。ajax 函数并将async参数设置为false。但请注意,在这种情况下,您的完整页面执行将暂停,至少在 $ .ajax 完成之前。