私はいくつかのデータを取得するコンポーネントを持っています。内部にバインディングがあるため、パスは動的です。
次に、パスを動的に変更するリンクがいくつかあります。それに応じてデータのリストが更新されることを期待しています。
ページを最初にロードしたときは問題なく動作しますが、リンクをクリックしてパスを更新する (したがって新しいデータを取得する) と、何も返されません。
オブザーバーで何が起こっているかを確認したところ、パスを更新するたびにデータが 2 回更新されているように見えます。最初に期待する実際のデータが返され、次に空の配列が返されます。
コンポーネントは次のとおりです。
<dom-module id="test-one">
<template>
<firebase-query app-name="main" path="/templates/[[template]]" data="{{items}}"></firebase-query>
<a on-tap="changeTemplate" data-template="template1">Template 1</a><br />
<a on-tap="changeTemplate" data-template="template2">Template 2</a><br />
<p>Current template is [[template]]</p>
<template is="dom-repeat" items="{{items}}" as="item">
[[item.ref]] - [[item.description]]<br />
</template>
</template>
<script>
Polymer({
is: 'test-one',
properties: {
items: {type: Array, observer: "dataChanged"},
template: {type: String, value: "template1"},
},
dataChanged: function(newData, oldData) {
console.log(newData);
},
changeTemplate: function(e) {
elm = e.currentTarget;
template = elm.getAttribute("data-template");
console.log("link has been clicked, we're changing to "+template);
this.set("template", template);
}
});
</script>
</dom-module>
リンクの 1 つをクリックすると、コンソールに次のように表示されます。
非同期の魔術が行われているようです - これを解決する方法はありますか?