聚合物高级数据绑定
Polymer Advanced DataBinding
我计划在我的应用程序中显示三列,每列包含大约 1k 个自定义项(图片、header、文本)。它可能会像
这样的东西一起工作
<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 名之内。有没有办法在聚合物中进行某种动态加载?
我会为此推荐core-list。 https://www.polymer-project.org/docs/elements/core-elements.html#core-list 我最近在专辑列表中使用了它。 (大专辑封面和几个按钮和文本)它大大提高了仅使用重复模板的性能。要加载更多结果,您可以使用 onscroll 回调。
请记住,所有这些都是假设您在 auto-binding 模板中工作。
<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 的工作方式相同。我给了 header 面板一个 ID。我只是将其命名为 header 面板。
<core-header-panel id="headerPanel">
然后我将 core-list 的滚动目标设置为使用 header 面板的滚动条。在js中创建一个变量
this.scrollTarget = document.querySelector('#headerPanel').scroller;
然后我 link 到 core-list
<core-list data="{{data}}" scrollTarget="{{scrollTarget}}">
<template>
<custom-item icon="{{model.icon}}" label="{{model.title}}"></custom-item>
</tempalte>
</core-list>
已设置 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
}
};
编辑:添加了有关等待模板绑定的内容。
希望这对您有所帮助。
还有一个用于无限滚动的聚合物元素:
core-scroll-thresold,可以结合core-list
我计划在我的应用程序中显示三列,每列包含大约 1k 个自定义项(图片、header、文本)。它可能会像
这样的东西一起工作<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 名之内。有没有办法在聚合物中进行某种动态加载?
我会为此推荐core-list。 https://www.polymer-project.org/docs/elements/core-elements.html#core-list 我最近在专辑列表中使用了它。 (大专辑封面和几个按钮和文本)它大大提高了仅使用重复模板的性能。要加载更多结果,您可以使用 onscroll 回调。
请记住,所有这些都是假设您在 auto-binding 模板中工作。
<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 的工作方式相同。我给了 header 面板一个 ID。我只是将其命名为 header 面板。
<core-header-panel id="headerPanel">
然后我将 core-list 的滚动目标设置为使用 header 面板的滚动条。在js中创建一个变量
this.scrollTarget = document.querySelector('#headerPanel').scroller;
然后我 link 到 core-list
<core-list data="{{data}}" scrollTarget="{{scrollTarget}}">
<template>
<custom-item icon="{{model.icon}}" label="{{model.title}}"></custom-item>
</tempalte>
</core-list>
已设置 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
}
};
编辑:添加了有关等待模板绑定的内容。
希望这对您有所帮助。
还有一个用于无限滚动的聚合物元素: core-scroll-thresold,可以结合core-list