【问题标题】:Infinite Scroll for Polymer 1.0 (without appending)Polymer 1.0 的无限滚动(不附加)
【发布时间】:2015-09-18 19:49:20
【问题描述】:

尝试混合一些 jQuery,但一切都基于附加,我不想使用的东西,因为我试图将我的设计完全基于绑定和标记模板和元素。我尝试以各种方式使用 scrollTop,但我总是依赖于本地 DOM 上附加的内容。如果我没记错的话,dom-repeat 与追加无关,而是与创建相同的标记并多次绑定它(如果我错了,请纠正我,我最近开始研究 Polymer 1)。

我只发现了在重复模板https://github.com/chadliu23/event-infinite-scroll 上使用无限滚动的一个很好的例子,但不幸的是,这不是我想要的,因为我正在将 Iron-ajax 解析数据混合到我的模板中。模拟 chadliu23 的示例使我进入了一个愚蠢的中间步骤,即创建一个额外的数组并将 ajax 中的数据推送到其中,但这完全是我不想做的事情,因为它会弄乱我的可重复模板重新标记。 还意识到有一些方法可以使用 css 创建无限滚动效果,但除了在图像集中之外无法找到任何其他方法来实现这一点。

同时,遗憾的是,iron-list 似乎还远未准备好,我找不到任何方法将 core-list 的概念理念应用到聚合物 1.0 中。

那么.....有什么建议吗?

【问题讨论】:

    标签: scroll polymer infinite


    【解决方案1】:

    我认为你需要一个item-page 组件:

    <dom-module id="item-page">
      <template>
        <iron-ajax id="ajax"
          params="{{_composeParamsForPage(page)}}"
          last-response="{{pageData}}">
        </iron-ajax>
        <template is="dom-repeat" items="{{pageData}}" as="item">
          <!-- Compose your list of items for this page here -->
        </template>
      </template>
    
      <script>
        (function(){
          "use strict";
    
          Polymer({
            is: 'item-page',
            properties: {
              page: {
                type: Number,
                observer: '_updatePage(page)'
              }
            },
            _updatePage: function(page) {
              this.$.ajax.generateRequest();
            }
          });
        })();
      </script>
    </dom-module>
    

    然后,创建一个无限滚动的列表:

    <template is="dom-repeat" items="{{pages}}" as="page">
      <item-page page="{{page}}"></item-page>
    </template>
    

    重要的是,在您的item-page 组件中,iron-ajax 确实没有设置了auto,因为page 属性最初将设置为undefined。相反,您应该观察page 并仅在它更新为undefined 以外的内容后采取相应措施。

    【讨论】:

    • 所以如果我理解正确,这个想法是基于根据 scrollTop 位置切换加载模式(这会很有趣)?另外,-我的大脑已经炖了几个小时了,所以这里有一个愚蠢的问题-:pages 是什么类型的属性-关于它的任何额外信息?
    • loading 会自行处理,您只需管理 pages 数组,其中包含要加载的页码。当您准备好加载下一页时,只需使用this.push('pages', &lt;pagenum&gt;) 将新的页码附加到数组的末尾。 Polymer 正在观察pages 数组,并将自动标记该页面的dom-repeat 内容,其中将包括一个新的iron-ajax
    • 因为pages 是一个数组,所以使用Polymer 的this.push 附加到它很重要,否则Polymer 不会知道pages 已更新。 pages 也可以有任何你喜欢的页码,所以你的无限滚动可以从第 1 页或第 50 页开始。
    • 听起来很棒,我试过后会回复你的。非常感谢您的宝贵时间!
    • 在审查时我认为我可能在某一点上弄错了:pageData 将在通过pages 循环的每次迭代中保持相同的范围,这意味着每次加载新页面时它都会去用新数据返回并重新标记所有旧页面!我不确定如何“重新定义”绑定变量,但我现在正在研究。
    猜你喜欢
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多