同様の要件に遭遇しました。私の例では、asp.net を実行していて、ユーザー コントロールからテンプレートを取得したいと考えていました。最初にお勧めするのは、マリオネットを調べることです。なぜなら、バックボーンで定型コードをたくさん書く必要がなくなるからです。次のステップは、テンプレートのロード方法をオーバーライドすることです。この場合、Ajax を使用してサーバーから HTML を取得する関数を作成しました。この関数を使用して HTML ページをプルダウンする例を見つけたので、MVC タイプのリクエストを作成できるように少し変更しました。どこからアイデアを見つけたのか思い出せません。それ以外の場合は、ここにリンクを提供します。
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; // wrap top-level templates for selection
file_cache[name] = file_content;
}
});
}
//return file_content.find('#' + name).html();
return file_content;
}
this.clear_cache = function () {
template_cache = {};
};
}
3 番目のステップは、Marionette のメソッドをオーバーライドしてテンプレートをロードすることです。app.addInitializer メソッドでこれを行いました。ここでは、テンプレート ローダーを初期化し、そのディレクトリをルート ハンドラーに設定しています。したがって、テンプレートをロードしたいときは、ビューにテンプレート「テンプレート名」を設定するだけで、Backbone は api/ApplicationScreens/templatename からテンプレートをロードします。ASP.net は <%= %> 構文に感銘を受けていないため、Handlebars を使用するようにテンプレートのコンパイルもオーバーライドしています。
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;
}
};
// compiling
Backbone.Marionette.TemplateCache.prototype.compileTemplate = function (rawTemplate) {
var compiled = Handlebars.compile(rawTemplate);
return compiled;
};
// rendering
Backbone.Marionette.Renderer.render = function (template, data) {
var template = Marionette.TemplateCache.get(template);
return template(data);
}
うまくいけば、これが役に立ちます。私は大規模な動的 Web サイトに取り組んできましたが、非常に順調に進んでいます。Marionette と Backbone.js を使用する全体的な機能とフローには、常に驚かされます。