3

手動でプリコンパイルして、testTemplate.handlebars として保存したハンドルバー テンプレートがあります。

さて、私のrequireJS + Backboneコードには、以下の機能があります-

define(['text!../templates/testTemplate.handlebars'
       ],function(testTemplate){

           var myView = Backbone.View.extend(

              initialize: function(options){

                  this.template = Handlebars.template(testTemplate);

              },

              render: function(data){

                  $(this.el).html(this.template(data));
              }

           );
});

そのため、testTemplate.handlebars は Javascript コードを文字列の形式で返します。このコードは、Handlebars.template に渡されると JS 関数を返します。this.template 変数で取得した値をコンソールに出力しようとすると、次のように表示されます-

function (n,r){return r=r||{},e.call(t,Handlebars,n,r.helpers,r.partials,r.data)}

ただし、$(this.el).html(this.template(data));render 関数の行が実行されると、「Uncaught Typeerror : object has no method call.」というエラー メッセージが表示されます。(e.call機能は見えますが)

ここで何か間違っていますか?

また、テンプレート ランタイムをコンパイルしようとすると、render 関数が機能します。ランタイム コンパイル Handlebars.compile(testTemplate) 中に、以下の関数が返されます -

function (e,t){return n||(n=r()),n.call(this,e,t)}
4

1 に答える 1

1

プリコンパイルした場合、.template 呼び出しを行う必要があるかどうかはわかりません。与えられた関数は、テンプレート自体として実行可能である必要があります。したがって、この:

$(this.el).html(this.template(data));

これになります:

$(this.el).html(testTemplate(data));
于 2013-08-19T00:24:54.073 に答える