Polymer 聚合:强制dom repeat重新计算所有项';s指数
我有一个dom repeat,它显示了一个大的项目列表(大约9000个) 我试图只显示部分项目,这样就不会出现一个巨大的滚动条。为此,如果只显示索引大于10的项,我将使用dom 当对dom repeat进行排序或过滤时,将重新计算每个项的索引,因此它工作得非常好 然后我使用iron scroll threshold来检测用户何时滚动到页面底部,然后增加显示的项目数 问题是,这不是重新计算索引——换句话说,我不知道如何“重画”dom 有没有办法强制dom重复重新计算所有索引?调用此.$.list.render()似乎无法完成此操作Polymer 聚合:强制dom repeat重新计算所有项';s指数,polymer,dom-repeat,Polymer,Dom Repeat,我有一个dom repeat,它显示了一个大的项目列表(大约9000个) 我试图只显示部分项目,这样就不会出现一个巨大的滚动条。为此,如果只显示索引大于10的项,我将使用dom 当对dom repeat进行排序或过滤时,将重新计算每个项的索引,因此它工作得非常好 然后我使用iron scroll threshold来检测用户何时滚动到页面底部,然后增加显示的项目数 问题是,这不是重新计算索引——换句话说,我不知道如何“重画”dom 有没有办法强制dom重复重新计算所有索引?调用此.$.list.
<template id="list" is="dom-repeat" id="table" items="{{items}}" sort="{{sortFuntion}}">
<template is="dom-if" if="{{isShowItem(index)}}">
[[item.name]]<br />
</template>
</template>
<iron-scroll-threshold scroll-target="document" on-lower-threshold="showMoreData">
</iron-scroll-threshold>
<script>
Polymer({
is: 'my-element',
properties: {
limit: {type: Number, value: 10}
},
isShowItem: function(index) {
return (index < this.limit);
// we only show the items that have an index smaller than "limit"
// (the index is recalculated for each sort or filter, so it works well).
},
showMoreData: function() {
// this is called by iron-scroll-threshold when we scroll down the page
this.set("limit", this.limit + 10);
// this is what doesn't seem to do anything:
// (ideally we want it to recalculate each item's index)
this.$.list.render();
}
});
</script>
[[item.name]]
聚合物({
是‘我的元素’,
特性:{
限制:{type:Number,value:10}
},
isShowItem:功能(索引){
收益率(指数<此限值);
//我们只显示索引小于“限制”的项
//(每个排序或筛选器都会重新计算索引,因此它运行良好)。
},
showMoreData:function(){
//当我们向下滚动页面时,这被称为“铁卷轴阈值”
此。设置(“限制”,此。限制+10);
//这似乎没有什么作用:
//(理想情况下,我们希望它重新计算每个项目的索引)
此.$.list.render();
}
});
我从不在dom重复中使用过滤器
或排序
,而是在项
中插入方法。然后我就可以控制所有的东西了
<template id="list" is="dom-repeat" id="table" items="[[_filterItems(items, scrollHeight)]]" sort="[[sortFuntion]]">
##code
</template>
---
<script>
Polymer({
## properties and other methods
_filterItems(items, scrollHeight) { // ex. scrollHeight = 100
var interpolationLevel = 5; // px
var minAllowedItems = 10;
var showThisManyItems = scrollHeight / interpolationLevel; // 100 / 5
showThisManyItems (showThisManyItems < minAllowedItems) ? minAllowedItems : showThisManyItems; // 100 / 5 = 20, but min value == 10
return items.filter(item, index) {
return index < showThisManyItems; // show this item if index < 20
}
},
}
</script>
##代码
---
聚合物({
##属性和其他方法
_filterItems(项目,滚动高度){//ex.scrollHeight=100
变量插值级别=5;//px
var minAllowedItems=10;
var showThisManyItems=scrollHeight/interpolationLevel;//100/5
showThisManyItems(showThisManyItems
请注意,您可以使用带有过滤器的铁名单来执行相同的操作。请查看此信息。它可能会有帮助: