2012-06-15 65 views
4

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

但这不能正常工作,任何想法?

回答

7

我假设你在提到Marionette.Async插件后运行了Marionette的v0.9版本。

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(); 
}; 

Renderer负责调用TemplateCache。


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

+0

感谢您的回答Derick。我使用github存储库中的文档和wiki。 – camaya

+1

亲爱的德里克,看起来像你的代码不工作,因为“loadTemplate”函数被从backbone.marionette.templatecache中的内部“加载”函数调用:58 //加载模板并编译它 var template = this。 loadTemplate(this.templateId); this.compiledTemplate = this.compileTemplate(template); 此函数不会将回调作为第二个参数传递,并且代码失败,并显示错误“callback is undefined”。 – AndreyM

+0

我也和安德烈有同样的问题。什么需要改变它的工作? – blessenm