1
我在Backbone.js之上使用Marionette,并且想要显示集合的子集,显示依赖于浏览器宽度的项数。根据屏幕大小显示Backbone.js集合的子集
例如:集合中的20个项目。每个ItemView以100px宽的div显示。
如果浏览器宽度为< = 600px的,只显示5等
我不得不在任一侧上的按钮改变为其中阵列中开始显示的视图表示指数。
我可以得到数组的子集,使用循环遍历起始索引 - >显示的数目和Collection.at(i)。
//var collection already exists
var subset = new Collection();
var N = floor(screenwidth/100);
for(var i = index; i< index+N; i++){
subset.add(collection.at(i));
}
如何将屏幕宽度传递到渲染函数,以及如何重新渲染屏幕尺寸更改? jquery会以某种方式绑定resize事件吗?
(注:数字显示的逻辑是不完全正确的,因为我还不知道最好的多少相对于其他屏幕元素)
谢谢!
经过进一步研究,另一可能性是为贯彻落实“过滤器”功能,木偶文件规定, [“的CollectionView:过滤器“](http://marionettejs.com/docs/v2.4.1/marionette.collectionview.html#collectionviews-filter) 'filter:function(child,index,collection){return index> displayIndex && index <( screenwidth确定号码)}'.....想法? – mix3d 2015-03-31 12:43:39
我实现了这个逻辑,它运作良好。但是,有两件重要的事情是必须的:在初始化传递(MyCollectionView)中绑定它后调用resize,并设置'modelEvents:{“change”:“render”}',否则它不会初始化为第一遍,并且模型不会自动呈现它们自己。注意我正在使用Marionette 2.4.1,而不是你的裸机。在标记为已回答之前,我会等待另一种方法,但这确实有效。谢谢! – mix3d 2015-03-31 15:16:59
这种方法的一个缺点是它需要将所有项目渲染到DOM,如果集合中的元素很大,这可能是禁止的。 (分页等) – mix3d 2015-03-31 15:50:11