我这样做了:
class HomeView extends Backbone.View
template: ->
template = "views/home.html"
cache = window.templates[template]
return cache if cache
cache = $.ajax(
url: "views/home.html"
async: false).responseText
window.templates[template] = cache
return cache
render: ->
@$el.html(@template())
而且,在我的应用程序的初始化中:
window.templates = {}
所以我可以异步加载模板并缓存它。显然,我会进行一些重构,并且可能会将其放入 JQuery 函数中。
感谢您的帮助。
编辑
我改变我的代码来做到这一点:
class Loader
@files: {}
@load: (path) ->
return @files[path] ||= $.ajax(url: path, async: false).responseText
现在我可以这样做了:
class HomeView extends Backbone.View
template: ->
Loader.load("views/home.html")
render: ->
@$el.html(@template())
这是javascript的版本:
var Loader;
Loader = (function() {
function Loader() {}
Loader.files = {};
Loader.load = function(path) {
var _base;
return (_base = this.files)[path] || (_base[path] = $.ajax({
url: path,
async: false
}).responseText);
};
return Loader;
})();
我可能会在github上发布代码......