外部把手模板骨干牵线木偶

cam*_*aya 4 marionette

在我的应用程序中,我添加了Marionette.sync插件并覆盖这些方法:

Backbone.Marionette.TemplateCache.prototype.loadTemplate = function (templateId, callback) {
    var tmpId = templateId.replace("#", ""),
        url = "/app/templates/" + tmpId + ".html";

    $.get(url, function (templateHtml) {
        compiledTemplate = Handlebars.compile($(templateHtml).html())
        callback.call(this, compiledTemplate);
    });
};

Backbone.Marionette.Renderer.renderTemplate = function (template, data) {
    template(data);
};
Run Code Online (Sandbox Code Playgroud)

但这不起作用,任何想法?

Der*_*ley 7

我假设你正在运行Marionette的v0.9,因为你提到了Marionette.Async插件.

Renderer方法名称中的更改略有偏差,并且TemplateCache不再调用您的对象.

如果您打算使用预编译的Handlebars函数,那么您只需要这样做:


Backbone.Marionette.Renderer.render = function(template, data){
  return template(data);
};
Run Code Online (Sandbox Code Playgroud)

如果您打算异步加载模板然后使用TemplateLoader进行编译,则代码需要如下所示:


Backbone.Marionette.TemplateCache.prototype.loadTemplate = function (templateId, callback) {
    var tmpId = templateId.replace("#", ""),
        url = "/app/templates/" + tmpId + ".html";

    $.get(url, function (templateHtml) {
        compiledTemplate = Handlebars.compile($(templateHtml).html())
        callback.call(this, compiledTemplate);
    });
};

Backbone.Marionette.Renderer.renderTemplate = function (templateId, data) {
    var renderer = $.Deferred();
    Backbone.Marionette.TemplateCache.get(templateId, function(template){
      var html = template(data);
      renderer.resolve(html);
    });
    return renderer.promise();
};
Run Code Online (Sandbox Code Playgroud)

渲染器负责调用TemplateCache.


旁注:您使用什么文章/博客文章/维基页/文档来获取代码?我可能错过了一些需要更新的页面.