外部把手模板骨干提线木偶(External handlebars templates backbon

2019-09-18 04:09发布

在我的应用程序添加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);
};

但是,这不是工作,任何想法?

Answer 1:

我假设你正在运行的木偶V0.9,因为你提到的Marionette.Async插件。

Renderer的变化稍微偏离方法名,并没有什么在呼唤你的TemplateCache对象了。

如果你打算使用预编译的手把功能,那么你只需要做到这一点:


Backbone.Marionette.Renderer.render = function(template, data){
  return template(data);
};

如果您打算将模板异步加载,然后进行编译,使用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();
};

渲染器负责调用TemplateCache。


旁注:什么文章/博客文章/ wiki页面/是你使用从让你的代码文档? 我可能已经错过了需要更新一些网页。



文章来源: External handlebars templates backbone marionette
标签: marionette