Polymer 聚合物:在不接触阵列顺序的情况下重复恢复/订购项目

Polymer 聚合物:在不接触阵列顺序的情况下重复恢复/订购项目,polymer,Polymer,这似乎是件小事,但我找不到: 如果我想在重复中反转项目的顺序,而不实际触及数组的顺序,如: <template repeat="{{layer in layers}}"> <div>{{layer.name}}</div> </template> <template repeat="{{layer in layers | reverse}}"> <div>{{layer.name}}</div> </

这似乎是件小事,但我找不到:
如果我想在重复中反转项目的顺序,而不实际触及数组的顺序,如:

<template repeat="{{layer in layers}}">
 <div>{{layer.name}}</div>
</template>
<template repeat="{{layer in layers | reverse}}">
 <div>{{layer.name}}</div>
</template>
...
reverse: function(arr){
   return _(arr).reverse();
}

{{layer.name}
其中层是一组对象。
我尝试应用过滤器,然后使用阵列的副本,如:

<template repeat="{{layer in layers}}">
 <div>{{layer.name}}</div>
</template>
<template repeat="{{layer in layers | reverse}}">
 <div>{{layer.name}}</div>
</template>
...
reverse: function(arr){
   return _(arr).reverse();
}

{{layer.name}
...
反向:功能(arr){
返回(arr).reverse();
}
但这会导致一些观察者失败,因为他们看到的是副本而不是原始对象。我不想对原始数组应用排序,因为代码的其他部分依赖于该顺序。

有人知道一个选项会影响DOM中的显示顺序吗?

我认为您需要这样做

<template repeat="{{layer in temp_array}}">
 <div>{{layer.name}}</div>
</template>

<script>
     Polymer('el-name',{
         ready: function(){
             this.temp_array =[];
             this.temp_array = layers.reverse();
         }
     }
);
</script>

{{layer.name}
聚合物(“el-name”{
就绪:函数(){
this.temp_数组=[];
this.temp_数组=layers.reverse();
}
}
);
如果您的层在就绪调用时为空,请使用change listener

<script>
         Polymer('el-name',{
             ready: function(){
                 this.temp_array =[];

             },
             layersChanged: function(oldValue, newValue){
                 if(newValue.length != 0)
                    this.temp_array = newValue.reverse();
             }

         }
    );
    </script>

聚合物(“el-name”{
就绪:函数(){
this.temp_数组=[];
},
图层更改:函数(旧值、新值){
如果(newValue.length!=0)
this.temp_数组=newValue.reverse();
}
}
);

希望对您有所帮助

如果可以将重复的元素放置在
垂直/水平布局中
,则
反向
可能会起到作用(请参阅):


{{layer.name}

我想提供一种更安全、更清晰的方法来还原数组以进行重复绑定:


{{layer.name}
聚合物({
LayerReversedChanged:函数(){
var layers=this.layersReversed.slice();
层。反向();
这个。层=层;
}
});
  • 直接或反向顺序由使用的属性定义:layers或layers Reversed
  • 相应的变化事件本身没有值变化(这可能导致陷入无止境的循环)
  • .reverse()方法更改原始数组,因此应将其应用于其副本

  • 还有另一种有趣而奢侈的方法可以通过中间web组件实现同样的功能:

    <polymer-element name="reverse-order" attributes="in out">
      <template></template>
      <script>
        Polymer({
          inChanged: function() {
            var out = this.in.slice();
            out.reverse();
            this.out = out;
          }
        });
      </script>
    </polymer-element>
    
    
    聚合物({
    inChanged:函数(){
    var out=this.in.slice();
    out.reverse();
    this.out=out;
    }
    });
    
    它可以用来绑定一些顺序不同的元素。也就是说,数组是由.push()方法填充的,而首选的数组表示形式是相反的顺序:

    <my-element layers="{{layersReversed}}"></my-element>
    <reverse-order in="{{layers}}" out="{{layersReversed}}"></reverse-order>
    <core-localstorage name="layers" value="{{layers}}"></core-localstorage>
    

    谢谢,这确实有帮助。这有点解决问题,我希望在我的数组和DOM之间的中间,可以用聚合物来解决。我想它还不存在。