У меня есть простой тег <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>