根据聚合物文档repeat
,可以使用以下语句迭代对象或数组<template>
:
“表达式”可以是简单的标识符、路径或完整的表达式(包括对象和数组字面量)。
然而,经过测试,似乎重复语句只适用于数组,而不适用于对象:
http://jsbin.com/oqotUdE/4/edit
我做错了什么吗?
根据聚合物文档repeat
,可以使用以下语句迭代对象或数组<template>
:
“表达式”可以是简单的标识符、路径或完整的表达式(包括对象和数组字面量)。
然而,经过测试,似乎重复语句只适用于数组,而不适用于对象:
http://jsbin.com/oqotUdE/4/edit
我做错了什么吗?
我最近遇到了这个问题,并通过使用返回的过滤器来解决它Object.keys(obj)
。下面是一个如何做到这一点的简单示例(也许有更好的方法,如果有,请赐教)...
<template repeat="{{item in obj | getKeys}}">
<span>Key: {{item}}</span>
<span>Value: {{obj[item]}}</span>
</template>
...etc...
<script>
Polymer('my-element', {
// yes i know, instantiate arrays/objects in the created method,
// but this is just an example
obj : {},
// my custom filter function to use in looping objects
getKeys : function(o){
return Object.keys(o);
}
});
</script>
当然,您可以变得更复杂,检查数据类型并确保它是一个对象。下面是一个循环遍历无限嵌套对象的递归版本(同样,如果有更简单的方法,请告诉我)
<template if="{{obj}}" id="root" bind="{{obj as o}}">
<ul>
<template repeat="{{item in o | getKeys}}">
<li>
<span class="key">{{item}}</span>
<template if="{{o[item] | isNotObject}}">
<span class="value">{{o[item]}}</span>
</template>
<template if="{{o[item] | isObject}}">
<template ref="root" bind="{{o[item] as o}}"></template>
</template>
</li>
</template>
</ul>
</template>
...etc...
<script>
Polymer('object-view', {
obj : {},
getKeys : function(o){
return Object.keys(o);
},
isObject : function(v){
return typeof(v) === "object";
},
isNotObject : function(v){
return typeof(v) !== "object";
}
});
</script>
这当然有效(对我来说),循环遍历对象(实际上是数组)。虽然,我对使用Object.keys
. 我会很高兴看到聚合物很快支持对象迭代。
那里的文档不精确。表达式的一般性质已得到说明,但我不相信它打算说您可以通过重复来迭代对象。
我相信此时只有数组支持迭代,尽管也有人谈论可能支持 NodeLists。