通过重复

时间:2015-09-11 19:05:44

标签: javascript dom polymer polymer-1.0

我尝试通过模板重复使用滑动页面。

   <swipe-pages>
        <template is="dom-repeat" items="{{values}}">
          <swipe-page>
               <div>
                   Text to swipe
               </div>
          </swipe-page>
         </template>
   </swipe-pages>

在我写的聚合物中

created: function()  {
        console.log(this);
        this.values = [1,2,3];
       }

它给我错误

Uncaught TypeError: Cannot set property 'values' of undefined
  Polymer.created   
  Polymer.Base._addFeature._invokeBehavior  
  Polymer.Base._addFeature._doBehavior  
  Polymer.Base.createdCallback  
  window.Polymer    
  (anonymous function)  
  Polymer.DomApi.DomApi._addNode

我无法让它发挥作用。

也可以使用

ready:function(){this.values=[1,2,3];};

不起作用。在这种情况下,它会抛出异常,即它们是0页。

我认为在模板重复运行后,滑动页面不会收到输入。

如果我不是通过模板来编写它就可以了。

更新

这是所有的聚合物元素。

<dom-module id="element-element">
          <template>
              <swipe-pages>
                <template is="dom-repeat" items="{{values}}">
                   <swipe-page>
                     <div>
                        text
                     </div>
                   </swipe-page>
               </template>
              </swipe-pages>
           </template>
           <script>
               Polymer({
                    is:'element-element',
                    created: function()  {
                        this.values = [1,2,3];
                    },
                    ready: function(){
                        this.values=[1,2,3];
                    }
                });

            </script>
</dom-module>

如果它们是聚合物的另一个滑动页面元素,可以动态改变,我将很高兴知道。

如果他们是黑客解决方案(比如动态加载所有元素),那也没问题

感谢。

2 个答案:

答案 0 :(得分:3)

快速解决方法是修改swipe-pages的源代码。

首先,找到selectedChanged函数并在最顶部添加此检查 -

selectedChanged: function (newValue, oldValue) {
    if (oldValue === undefined) {
        return;
    }

    if (newValue >= this.pageCount || newValue < 0) {
        ....

然后,由于过早调用resetPositionsresetWidths,您想要替换以下内容

ready: function () {
    this.resetPositions();
    this.resetWidths();
}

attached: function () {
    this.async(function () {
        this.resetPositions();
        this.resetWidths();
    }, 5);

确保页面已通过dom-repeat呈现。

最后,请确保在readyattached内初始化数组。

ready: function()  {
    console.log(this);
    this.values = [1,2,3];
}

应该这样做!

答案 1 :(得分:1)

请看一下:argon-swipeable-pages

<argon-swipeable-pages items="[[ data ]]" as="person" index-as="pix">
    <template>
        <p>Name: [[ person.name ]]</p>
        <p>Age: [[ person.age ]]</p>
        <p>Index: [[ pix ]]</p>
    </template>
</argon-swipeable-pages>