我這樣做:
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())
而且,在我的應用程序的initalization:
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上發佈代碼...
您是否嘗試過使用async設置爲false的$ .ajax?假設你正在使用jQuery – Peeter
也是你的應用程序將被託管在客戶端或服務器(phonegap基本上只是包裝它)? – Peeter
我必須在初始化時加載模板,將其存儲在成功上並緩存它以僅加載一次?嗯,它可以是一個解決方案。有沒有更好的辦法?它認爲更好的解決方案是預編譯它。 – Dougui