我正在尝试使用underscore.template以这种方式通过jQuery.get
加载html来编译JavaScript模板:
_.template($.get('my_template.html'), $get(function(data) {
return data;
}));
但我收到以下消息
TypeError: Object #<Object> has no method 'replace'
任何提示?
答案 0 :(得分:3)
$.get
并不像您认为的那样工作。 $.get('my_template.html')
没有返回my_template.html
,它会返回jqXHR
,您将获取的内容传递给$.get
回调:
$.get('my_template.html', function(html) {
// my_template.html will be in `html` here.
});
因此,如果您真的想使用$.get
来检索模板,那么您将不得不等待AJAX调用从服务器返回一些内容并且直到稍后才会发生。您可以使用$.ajax
的async
选项发出同步AJAX请求:
async (默认:
true
)
类型:布尔
默认情况下,所有请求都是异步发送的(默认设置为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一起提供。