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

しかし、これは機能しません。何かアイデアはありますか?

4

1 に答える 1

7

Marionette.Asyncプラグインについて言及しているので、Marionetteのv0.9を実行していると思います。

メソッド名のRenderer変更はわずかにずれており、TemplateCacheオブジェクトを呼び出すものはもうありません。

コンパイル済みのHandlebars関数を使用する場合は、次の操作を行うだけで済みます。


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ページ/ドキュメントは何ですか?更新が必要なページを見逃している可能性があります。

于 2012-06-15T18:37:33.747 に答える