我决定进入Backbone竞技场&在搜索了BB& Marionette的医生,我在看似简单的事情上遇到了一些麻烦。
我只是想自定义第三条记录上显示的内容。
以下是我只使用Rails
的方法 <% @posts.each_with_index do |post, i| %>
<% if i == 1 || i == 7 || i == 14 %><!-- 1st, 7th, & 14th record -->
display title, description & something else
<% else %><!-- other records -->
display only title
<% end %>
<% end %>
使用Backbone + Marionette + Underscore,以下是我的记录显示方式: 的控制器
postsRegion: (posts) ->
postsView = @getPostsView posts
postsView.on "childview:posts:post:clicked", (child, post) ->
App.vent.trigger "posts:post:clicked", post
@layout.postsRegion.show postsView
getPostsView: (posts) ->
new List.Posts
collection: posts
查看
class List.Post extends App.Views.ItemView
template: "posts/list/_post"
tagName: "li"
className: "span4 item"
events:
"click" : -> @trigger "posts:post:clicked", @model
如何制作第1版,第7版和第1版第14(或只是第三)记录显示不同的东西?另外,作为设计师的更多人,是否有人可以使用此js库建议任何有关视图的进一步读数?
答案 0 :(得分:1)
您可能会遇到此类行为的问题:Marionette集合视图为集合中的每个模型呈现项目视图。反过来,这些项目视图仅根据模型中的数据调整显示的内容(即渲染的模板)。
如果你想突出显示每个第7项,我会看到以下选项:
onRender
方法以设置这些行的样式(最简单,但可能会对大型集合产生性能影响)appendHtml
以设置元素的样式(例如在视图上定义)总而言之,你将面临一场艰苦的战斗,如果你可以使用模型属性进行造型,那么你的生活将会更容易。请注意,此模型属性不必保留在服务器上......
答案 1 :(得分:1)
在您的集合视图中,您应该能够根据索引将选项传递给项目视图,如下所示:
MyCollectionView = Backbone.Marionette.CollectionView.extend({
itemView : MyItemView,
itemViewOptions : function (model, index) {
if (index % 3 == 0) {
return { specialValue : "foo" };
} else {
return {};
}
}
};
MyItemView = Backbone.Marionette.ItemView.extend({
onRender : function () {
if (this.options.specialValue) {
// DO SOMETHING SPECIAL
}
}
};
木偶文件实际上非常棒。有问题的函数可以是found here。