Backbone.js 如何使用主干渲染灰尘模板

Backbone.js 如何使用主干渲染灰尘模板,backbone.js,dust.js,Backbone.js,Dust.js,我试图在主干视图中显示一个dust模板(已编译) 以下是视图中的渲染函数: render: -> dust.render("customer-item", @model.toJSON(), (err, output) -> throw err if err $(@el).html output ) @ 当我引导视图时,我看到在我的容器中添加了2个div(对应于应该加载的2个模型),但它们都是空的。单个模板未重新设计。。。 当我调试“output”变量时,

我试图在主干视图中显示一个dust模板(已编译)

以下是视图中的渲染函数:

render: ->
  dust.render("customer-item", @model.toJSON(), (err, output) ->
    throw err if err
    $(@el).html output
  )
  @
当我引导视图时,我看到在我的容器中添加了2个div(对应于应该加载的2个模型),但它们都是空的。单个模板未重新设计。。。 当我调试“output”变量时,我看到了模板,因此理论上应该正确加载它

当我做一个简单的测试时,我可以看到以下输出:

render: ->
      $(@el).html "<span>TEST</span>"
      @
render:->
$(@el.html“测试”
@
但对于该场景,我没有输出:

render: ->
      dust.render("customer-item", @model.toJSON(), (err, output) ->
        $(@el).html "<span>TEST</span>"
      )
      @
render:->
render(“客户项”,@model.toJSON(),(err,output)->
$(@el.html“测试”
)
@

非常感谢您的帮助。

我没有太多使用Dust,但我记得您应该先这样编译模板(使用纯Javascript):

编辑:

我想我找到了问题所在:当您在dust.render函数中调用
$(this.el).html(out)
时,
与上下文无关。因此,您必须将渲染函数更改为类似以下内容:

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

正如@Ingro所解释的,这是这个(@)背景下的一个问题

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

另一个选项是使用CoffeeScript的“=>”(胖箭头)


嗨,谢谢你的回答。我忘了提到我的模板已经在服务器端编译好了。我将node.js与duster.js一起使用,如本博客所述:。如果我在客户端编译模板,我将失去dustjs的所有潜力。欢迎提出任何想法……对不起,我对您采用的方法不太了解。。。如果调试输出变量,会看到什么?使用模型数据编译的模板,还是仅使用原始模板?我看到了使用模型数据的模板。发生了什么我不知道。。。我看到两个div被注射,但里面什么都没有。也许我的el元素不正确,但我怎么知道呢?在渲染函数中,您可以对dust的渲染函数进行注释,然后只需编写
$(@el).html(“TEST”)
,看看它是否真的是dyst的错。在视图中如何声明el?在
dust.render
函数外,我有一个输出,但在同一测试
$(@el.html“test”
内,我没有输出。为什么我不知道。。。
var self = this;
dust.render("table",this.model.toJSON(),function(err,out){
    $(self.el).html(out);
});
render: ->
  self = @
  dust.render("customer-item", @model.toJSON(), (err, output) ->
    throw err if err
    self.$el.html output
  )
  @
render: ->
  dust.render("customer-item", @model.toJSON(), (err, output) =>
    throw err if err
    @$el.html output
  )
  @