我打算在我的应用程序中显示三列,每列有大约1k个自定义项(图片,标题,文本)。它可能适用于像
这样的东西<template>
<template bind="{{myData as m}}">
<template repeat if="{{m.1}}">
<custom-item icon="{{m.icon}}" label="{{m.title}}"></custom-item>
</template>
<template repeat if="{{m.2}}">
<custom-item icon="{{m.icon}}" label="{{m.title}}"></custom-item>
</template>
...
</template>
</template>
但我想避免从数据库向客户端加载3k项目,它们可能会保持在前200名之内。有没有办法在聚合物中进行某种动态加载?
答案 0 :(得分:2)
我会推荐核心清单。 https://www.polymer-project.org/docs/elements/core-elements.html#core-list我最近在专辑列表中使用过它。 (大型专辑封面和几个按钮和文本)通过仅使用重复模板大大提高了性能。要加载更多结果,您可以使用onscroll回调。
请记住,所有这些都假设您正在使用自动绑定模板。
<template id="app" is="auto-binding">
// all html code in here
</template>
并等待绑定模板
document.querySelector("#app").addEventListener('template-bound', function () {
//all this js code will be in here
});
我的应用程序我使用core-header-panel获取滚动事件,它将与core-scroll-header-panel一样工作。我给了标题面板一个id。我刚才称它为headerPanel。
<core-header-panel id="headerPanel">
然后我将coreTarget设置为core-list以使用headerPanel的滚动条。在js中创建一个变量
this.scrollTarget = document.querySelector('#headerPanel').scroller;
然后我将其链接到核心列表
<core-list data="{{data}}" scrollTarget="{{scrollTarget}}">
<template>
<custom-item icon="{{model.icon}}" label="{{model.title}}"></custom-item>
</tempalte>
</core-list>
有核心列表设置。至于不加载3000个结果我将在我们最近设置的滚动条上使用回调。然后计算已滚动的页面的百分比,如果滚动更多,则调用函数,然后说80%
this.scrollTarget.onscroll = function () {
var precent = (this.scrollTarget.scrollTop / (this.scrollTarget.scrollHeight - this.scrollTarget.offsetHeight)) * 100;
if (precent > 80) {
// call some function to .push() more to this.data
}
};
编辑:添加了关于等待模板绑定的信息。
希望这会有所帮助。
答案 1 :(得分:2)
还有一个用于无限滚动的聚合物元素: core-scroll-thresold,您可以将其与核心列表
结合使用