Marionette:使用索引将类添加到ItemView
Marionette: Use index to add class to ItemView
我目前有一个复合视图,我希望每个ItemView都基于其索引进行渲染。
例如,我想每隔三个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>
JS
var ListItemView = Backbone.Marionette.ItemView.extend({
template: '#list-item',
tagName: 'li'
});
var ListComposite = Backbone.Marionette.CompositeView.extend({
itemView: ListItemView,
itemViewContainer: "ul",
template: '#list-layout',
appendHtml: function(cv, iv, index){
if ((index + 1) % 3 == 0) iv.$el.addClass('rowend');
var $container = this.getItemViewContainer(cv);
$container.append(iv.el);
}
});
一个选项是使用buildItemView
https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.collectionview.md#collectionviews-builditemview
现在您不能直接访问索引,但可以使用下划线方法来解决这个问题(这些方法都应该扩展到主干集合中,尤其是这个集合http://underscorejs.org/#indexOf)。
你得到的主要好处是,你可以直接影响itemviews 的类
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;
},
});
相关文章:
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在映射数组中添加换行符
- 正在将数据主题添加到所有项目
- ZeroClipboard-在复制之前添加到值
- 我可以在json对象中添加一个函数吗
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何添加浮动和非浮动,其他
- 添加文字和评论功能更新Div
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 在函数中添加数组元素的数值
- 如何将歌曲添加到jPlayer
- 在html Select中添加搜索
- Java脚本时间添加
- FabricJs-限制主对象内添加对象的移动区域
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 如何在Google柱状图中动态添加行/列
- Marionette:使用索引将类添加到ItemView
- 木偶-将类添加到父类ItemView tagname