Javascript 具有动态id的主干视图
我刚刚意识到我误解了Javascript 具有动态id的主干视图,javascript,backbone.js,Javascript,Backbone.js,我刚刚意识到我误解了Backbone.View的el属性。基本上,我的视图需要基于其模型属性的动态id属性。我认为我可以很好地工作,因为我只是在模板中指定了它: <script type="text/template" id="item_template"> <li class="item" id="{{identifier}}"> <span class="name">{{name}}</span> </li> <
Backbone.View的el
属性。基本上,我的视图需要基于其模型属性的动态id
属性。我认为我可以很好地工作,因为我只是在模板中指定了它:
<script type="text/template" id="item_template">
<li class="item" id="{{identifier}}">
<span class="name">{{name}}</span>
</li>
</script>
<script type="text/template" id="item_template">
<span class="name">{{name}}</span>
</script>
这是可行的,但当然,我只是想问一下,是否有一种通过主干网进行此操作的首选方法。创建视图时,传入一个选择器,该选择器将让视图找到现有的预渲染DOM元素:
var id = "1234";
var view = YourView({el: '#'+id});
是的,在主干网中有一种标准的方法。您可以将id
传递给视图构造函数。您还可以重构模板,以便主干为您创建父元素。尝试以下更简单的模板:
<script type="text/template" id="item_template">
<li class="item" id="{{identifier}}">
<span class="name">{{name}}</span>
</li>
</script>
<script type="text/template" id="item_template">
<span class="name">{{name}}</span>
</script>
并将其实例化如下:
var view = new YourView({
model: mymodel,
id: mymodel.get('identifier') // or whatever
})
祝你好运 还有一种方法。我发现这比每次创建视图实例时传递id
更方便
模板:
<script type="text/template" id="item_template">
<span class="name">{{name}}</span>
</script>
元素没有预渲染,据我所知,它不在DOM中。它只是一个模板,在一个脚本标签中。再次感谢maxl0rd(在另一个问题上帮助了我:D)。这实际上似乎应该是可行的:D我会尝试一下,然后返回标记为正确:)对于那些不知道的标记名,如果未指定,则标记名默认为div。我会看到很多模板都有一个容器[form,div,等等,带有一个id],这应该是视图的一部分,而不是模板。如maxl0rd的回答所示,投票表决这个答案,因为它在“构造函数”中定义了一般解决方案
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
}
}
})