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 解释的那样,这是 this (@) 上下文的一个问题。

一个选项是将 this 分配给局部变量(如“self”或“that”)

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

另一种选择是使用 CoffeeScript 的“=>”(粗箭头)

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