我碰到一個來了類似的要求。在我的例子中,我正在運行asp.net,並希望從用戶控件中提取我的模板。我建議的第一件事就是研究Marionette,因爲它可以幫助您避免在Backbone中編寫大量鍋爐代碼。下一步是重寫模板的加載方式。在這種情況下,我創建了一個使用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 = {};
};
}
第三步是重寫Marionette的加載模板的方法。我在app.addInitializer方法中做了這個。在這裏,我正在初始化我的模板加載器,並將其目錄設置爲路由處理器。所以當我想加載模板時,我只需在我的視圖中設置模板:「templatename」,Backbone將從api/ApplicationScreens/templatename加載模板。我也正在重寫我的模板編譯以使用Handlebars,因爲ASP.net對<%=%>語法沒有留下深刻的印象。
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);
}
希望這會有所幫助。我一直在一個大型的動態網站上工作,並且它非常漂亮。我一直對使用Marionette和Backbone.js的整體功能和流程感到驚訝。
謝謝!問題是,當我點擊'el'中的'button'時,事件不會被解僱。 http://vpaste.net/Cv0Ch – daGrevis 2013-02-22 16:04:35
用delegateEvents信息更新了我的答案,這些信息應該解決有關未開火事件的問題。 – 2013-02-22 16:14:59
再次感謝!我之前也在研究這種方法!這很有趣,它不起作用。 HTML預先添加到body,但事件不會觸發。你可以幫我嗎? :(http://vpaste.net/zKzHS – daGrevis 2013-02-22 16:25:39