我遇到了同样的问题。我在网上找到了一个示例,我对其进行了修改以使其适用于我正在做的事情(他们正在提取 html 文件,我想提取 ASP.net 页面)但我无法再次在网上找到该示例以提供给那个人信用。但是,这是我修改后的代码。
首先是模板加载器:
if (!window.JackTemplateLoader) {
function JackTemplateLoader(params) {
if (typeof params === 'undefined') params = {};
var TEMPLATE_DIR = params.dir || '';
var file_cache = {};
function get_filename(name) {
if (name.indexOf('-') > -1) name = name.substring(0, name.indexOf('-'));
return TEMPLATE_DIR + name;
}
this.get_template = function (name) {
var template;
var file = get_filename(name);
var file_content;
var result;
if (!(file_content = file_cache[name])) {
$.ajax({
url: file,
async: false,
success: function (data) {
file_content = data;
file_cache[name] = file_content;
}
});
}
return file_content;
}
this.clear_cache = function () {
template_cache = {};
};
}
}
然后在我的 Marionette 应用程序中,我创建了一个 addInitilizer 来覆盖 Marionette 模板加载器。
app.addInitializer(function (options) {
app.JackTemplateLoader = new JackTemplateLoader({ dir: "/api/ApplicationScreens/", ext: '' });
Backbone.Marionette.TemplateCache.prototype.loadTemplate = function (name) {
if (name == undefined) {
return "";
} else {
var template = app.JackTemplateLoader.get_template(name);
return template;
}
};
最好的部分是模板加载器将缓存我的模板,因此它们只加载一次。我正在对此代码进行更改以发送一个标志,该标志将指示我是否要缓存模板。