2011-04-30 234 views
0

从骨干文档:渲染问题

所有意见必须在所有时间(el的属性)DOM元素,无论他们已经被插入到页面或没有。

我有以下非常简单的JavaScript文件:

CBBItem = Backbone.Model.extend(
{ 
}); 

CBBTrackItem = Backbone.View.extend(
{ 
    template: _.template("<span><%= title %></span>"), 

    initialize: function() 
    { 
    _.bindAll(this, "render"); 
    }, 

    render: function() 
    { 
    $(this.el).html(this.template(this.model.toJSON())); 
    return this; 
    } 
}); 

而且HTML页面是这样的:

<script type="text/javascript"> 
$(function() 
{ 
    var itm1 = new CBBItem({ title: 'track 1'}); 
    var itmUI1 = new CBBTrackItem({ model: itm1, id: "kzl" }); 
    itmUI1.render(); 
}); 
</script> 

<body> 
    <div id="kzl"></div> 
</body> 

我认为项目不希望渲染虽然有创建的div在页面上。我可以用很多方式欺骗这种情况。例如,做这样的事情

var itm1 = new CBBItem({ title: 'track 1'}); 
var itmUI1 = new CBBTrackItem({ model: itm1, id: "big_kzl" }); 
$(itmUI1.render().el).appendTo("#kzl"); 

但是,为什么主要案件无法正常工作?

回答

1

这里有一种可能性:你没有为视图设置el,所以它不知道如何处理你的模板。你能修改你的视图调用代码看起来像这样吗?

var itmUI1 = new CBBTrackItem({ 
    model: itm1, 
    id: "big_kz1", 
    el: "#kz1" 
}); 
itmUT1.render(); 

或者,如果值永不变化,您可以在视图的初始化范围内设置el值。这样做的好处是视图的调用者不必知道这些信息,因此视图更加独立。

0

在构建过程中传递ID和事件等值时遇到问题,而不是在扩展期间定义它们。你可能想检查一下,看看你是否在寻找差异。

1

如果文档已经有了您想要用作特定视图的el的元素,那么您必须在视图初始化时手动将该dom元素设置为el属性。骨干为您提供了没有捷径。