Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 木偶:使用索引将类添加到ItemView_Javascript_Backbone.js_Marionette - Fatal编程技术网

Javascript 木偶:使用索引将类添加到ItemView

Javascript 木偶:使用索引将类添加到ItemView,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我目前有一个复合视图,我希望每个ItemView都基于其索引进行渲染 例如,我想向每隔三个项目视图添加一个类 我所倾向的解决方案是改变appendHtml(),每三次向视图添加一个类。我已经把代码放在下面了 使用getItemView()有什么好处吗?我看到的一个缺点是它不能直接访问索引 模板 <script id="list-item" type="text/html"> <%= name %> </script> <script id="lis

我目前有一个复合视图,我希望每个ItemView都基于其索引进行渲染

例如,我想向每隔三个
项目视图添加一个类

我所倾向的解决方案是改变
appendHtml()
,每三次向视图添加一个类。我已经把代码放在下面了

使用
getItemView()
有什么好处吗?我看到的一个缺点是它不能直接访问索引

模板

<script id="list-item" type="text/html">
  <%= name %>
</script>

<script id="list-layout" type="text/html">
    <div class='collection'>
        <h3><%= name %></h3>
        <ul></ul>
    </div>
</script>

一个选项是使用
buildItemView

现在您将无法直接访问索引,但可以使用下划线方法来解决这一问题(这些方法都应该扩展到主干集合中,尤其是这个集合)

您获得的主要好处是可以直接影响ItemView的类

var ListComposite = Backbone.Marionette.CompositeView.extend({
  itemView: ListItemView,
  itemViewContainer: "ul",

  template: '#list-layout',

  buildItemView: function(item, ItemViewType, itemViewOptions){
       var index = this.collection.indexOf(item);

       var options = _.extend({model: item}, itemViewOptions, {className:"someClassName" + index});

       var view = new ItemViewType(options);

       return view;
  },
});

看一看谢谢,大卫。这里提供的解决方案在概念上似乎更加合理。
var ListComposite = Backbone.Marionette.CompositeView.extend({
  itemView: ListItemView,
  itemViewContainer: "ul",

  template: '#list-layout',

  buildItemView: function(item, ItemViewType, itemViewOptions){
       var index = this.collection.indexOf(item);

       var options = _.extend({model: item}, itemViewOptions, {className:"someClassName" + index});

       var view = new ItemViewType(options);

       return view;
  },
});