Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有动态id的主干视图_Javascript_Backbone.js - Fatal编程技术网

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
       }
    }
})