我正在尝试在骨干视图中显示灰尘模板(已编译)。
这是我在视图中的渲染功能:
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>"
)
@
非常感谢你的帮助。
答案 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
)
@