如何使用骨干渲染灰尘模板

时间:2012-10-06 09:28:18

标签: backbone.js dust.js

我正在尝试在骨干视图中显示灰尘模板(已编译)。

这是我在视图中的渲染功能:

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>"
      )
      @

非常感谢你的帮助。

2 个答案:

答案 0 :(得分: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);
});

修改

我想我发现了问题所在:当你在dust.render函数中调用$(this.el).html(out)时,this已经脱离了上下文。因此,您必须将渲染功能更改为:

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

答案 1 :(得分:1)

正如@Ingro解释的那样,这是(@)上下文的问题。

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

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

另一种选择是使用CoffeeScript的“=&gt;” (胖箭)

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