我刚才意识到我误解了el
的{{1}}属性。基本上我的视图需要基于其模型属性的动态Backbone.View
属性。我认为我的工作正常,因为我只是在我的模板中指定它:
id
但是,我意识到Backbone实际上在做的是将这个编译的模板放到另一个元素中,<script type="text/template" id="item_template">
<li class="item" id="{{identifier}}">
<span class="name">{{name}}</span>
</li>
</script>
默认情况下。我通过阅读文档了解了更多相关信息,但我仍然对如何创建动态div
感到困惑。
最好,我希望找到一种方法,使上面模板中的内容充当我的id
,因为它已经拥有我想要的一切,但我不知道这是否可能。所以我想知道是否有一种方法可以指定动态el
属性。
我尝试在id
方法initialize
中进行设置,但似乎没有任何效果,可能是因为到目前为止已经太晚了。
我目前正在做的只是使用jQuery在this.id = this.model.get('attr')
期间添加id
:
render()
它有效,但当然,我只是想询问是否有一种首选的方式通过Backbone来实现。
答案 0 :(得分:20)
是的,在Backbone中有一种标准方法可以做到这一点。您可以将id
传递给View构造函数。您还可以重构模板,以便Backbone为您创建父<li>
元素。试试这个更简单的模板:
<script type="text/template" id="item_template">
<span class="name">{{name}}</span>
</script>
并将这些添加到您的视图中:
myView = Backbone.View.extend({
className: "item",
tagName: "li"
})
并像这样实例化:
var view = new YourView({
model: mymodel,
id: mymodel.get('identifier') // or whatever
})
祝你好运!
答案 1 :(得分:5)
还有一种方法。我发现每次创建视图实例时都比传递id
更方便。
模板:
<script type="text/template" id="item_template">
<span class="name">{{name}}</span>
</script>
查看:
var MyView = Backbone.View.extend({
tagName: 'li',
attributes: function(){
return {
id: this.model.get('identifier'),
class: 'item'//optionally, you could define it statically like before
}
}
})
答案 2 :(得分:1)
创建视图时,传入一个选择器,让视图找到现有的预渲染DOM元素:
var id = "1234";
var view = YourView({el: '#'+id});