我試圖用underscore.template通過加載一個html通過jQuery.get
這樣編譯一個JavaScript模板的HTML文件:負荷_.template
_.template($.get('my_template.html'), $get(function(data) {
return data;
}));
,但我得到了以下信息
TypeError: Object #<Object> has no method 'replace'
任何提示?
我試圖用underscore.template通過加載一個html通過jQuery.get
這樣編譯一個JavaScript模板的HTML文件:負荷_.template
_.template($.get('my_template.html'), $get(function(data) {
return data;
}));
,但我得到了以下信息
TypeError: Object #<Object> has no method 'replace'
任何提示?
$.get
不按照您認爲的方式工作。 $.get('my_template.html')
不返回my_template.html
,它返回一個,你得到的東西傳遞給$.get
回調:
$.get('my_template.html', function(html) {
// my_template.html will be in `html` here.
});
所以,如果你真的想用$.get
檢索您的模板,你會必須等待AJAX調用才能從服務器返回某些內容,並且直到稍後纔會發生。
異步(默認:
true
)
類型:您可以使用async
選項$.ajax
做同步AJAX請求布爾
默認情況下,所有的請求都是異步發送(即此設置爲true
默認)。如果您需要同步請求,請將此選項設置爲false。 [...]請注意,同步請求可能會暫時鎖定瀏覽器,並在請求處於活動狀態時禁用任何操作。
這將是這樣的:
var tmpl;
$.ajax({
url: 'my_template.html',
type: 'get',
async: false,
success: function(html) {
tmpl = html;
}
});
var t = _.template(tmpl);
// `t` is now your compiled template function
我不推薦,雖然這,async:false
是做給用戶一個討厭的東西,並用它會讓人覺得你的應用程序已鎖定或墜毀。
我會找到一種不同的方式來加載你的模板。將它們全部扔在<script>
元素中,以便它們始終可用或隨JavaScript一起使用它們。