我有一个简单的
所以,我需要在准备好数据后获取数据,循环遍历每个项目,并更改某些值。
为此,我在数据上有一个观察器来检测何时准备就绪。但是,我无法弄清楚如何从JavaScript函数中循环遍历数据。由于某种原因,
这是组件:
理想情况下,我希望在观察者函数中只需要做类似这样的事情:
<firebase-query>
标签,并且我想在通过<dom-repeat>
显示之前操纵一些数据。例如,我需要将某些字段转换为链接,并解析一些日期。所以,我需要在准备好数据后获取数据,循环遍历每个项目,并更改某些值。
为此,我在数据上有一个观察器来检测何时准备就绪。但是,我无法弄清楚如何从JavaScript函数中循环遍历数据。由于某种原因,
for(var i in items)
不起作用,尽管这些项目确实存在。这是组件:
<dom-module id="cool-stuff">
<template>
<firebase-query id="query" path="/items" data="{{items}}"></firebase-query>
<template is="dom-repeat" items="{{items}}" as="item">
[[item.name]]<br />
[[item.date]]<br />
</template>
</template>
<script>
Polymer({
is: 'ix-table',
properties: {
items: {type: Object, observer: "_itemsChanged"},
}
itemsChanged: function(data) {
// how do I loop through the data received from firebase-query?
console.log(data);
}
});
</script>
</dom-module>
理想情况下,我希望在观察者函数中只需要做类似这样的事情:
for(var i in data) {
obj = data[i];
obj.name = '<a href="/item/"+obj.key>'+ojb.name+'</a>';
}
但我似乎无法循环遍历这些数据。
在观察函数内部,console.log(data)
返回一些奇怪的东西,就像这样:
Array[o]
0: Object (which contains a proper item)
1: Object (same)
2: Object (same)
更新:
这是console.log(data)返回的截图(从观察者内部获取):
该数组似乎已填充了所有对象,但它显示为Array[0]。因此,我无法循环遍历它们。
更新2:
感谢arfost,这是解决方案:
<script>
Polymer({
is: 'ix-table',
properties: {
items: {type: Object},
}
observers: [
'_itemsChanged(items.splices)'
],
_itemsChanged: function(changeRecord) {
if (changeRecord) {
changeRecord.indexSplices.forEach(function(s) {
for (var i=0; i<s.addedCount; i++) {
var index = s.index + i;
var item = s.object[index];
console.log('Item ' + item.name + ' added at index ' + index);
// do whatever needed with the item here:
this.items[index].name = "New name";
}
}, this);
}
},
});
</script>