1

バックボーンビュー内にダストテンプレート(コンパイル済み)を表示しようとしています。

これがビュー内の私のレンダリング関数です:

render: ->
  dust.render("customer-item", @model.toJSON(), (err, output) ->
    throw err if err
    $(@el).html output
  )
  @

ビューをリードすると、コンテナ内に2つのdivが追加されているのがわかります(ロードする必要がある2つのモデルに対応)が、両方とも空です。個々のテンプレートは再作成されません...「出力」変数をデバッグすると、テンプレートが表示されるので、理論的には正しくロードされるはずです...

簡単なテストを行うと、次の出力が表示されます。

render: ->
      $(@el).html "<span>TEST</span>"
      @

しかし、そのシナリオでは、出力がありません

render: ->
      dust.render("customer-item", @model.toJSON(), (err, output) ->
        $(@el).html "<span>TEST</span>"
      )
      @

助けてくれて本当にありがとうございます。

4

2 に答える 2

2

私はDustをあまり使用しませんでしたが、覚えていることとして、最初にテンプレートをそのようにコンパイルする必要があります(プレーンなJavascriptで):

var source   = $("#some-template").html();
var compiled = dust.compile(source,"table"); 

dust.loadSource(compiled);

dust.render("table",this.model.toJSON(),function(err,out){
    $(el).html(out);
});

編集:

問題がどこにあるかを見つけたと思い$(this.el).html(out)ます。dust.render関数の内部を呼び出すとthis、コンテキストから外れます。したがって、レンダリング関数を次のようなものに変更する必要があります。

var self = this;
dust.render("table",this.model.toJSON(),function(err,out){
    $(self.el).html(out);
});
于 2012-10-06T11:26:52.640 に答える
1

@Ingroが説明したように、これはこの(@)コンテキストの問題です。

オプションは、これをローカル変数("self"や"that"など)に割り当てることです。

render: ->
  self = @
  dust.render("customer-item", @model.toJSON(), (err, output) ->
    throw err if err
    self.$el.html output
  )
  @

もう1つのオプションは、CoffeeScriptの「=>」(太い矢印)を使用することです。

render: ->
  dust.render("customer-item", @model.toJSON(), (err, output) =>
    throw err if err
    @$el.html output
  )
  @
于 2013-01-27T08:51:26.750 に答える