ユーザー ログイン イベント後のページの最初の読み込みitems
時に、Firebase に保存されている一連のオブジェクトをプロパティに入力したいと考えています。
Aは私の望ましい行動を達成します。
あ<firebase-query
id="query"
...
path="users/[[user.uid]]/widgets"
data="{{items}}">
</firebase-query>
Bはしません。
B<firebase-query
id="query"
...
path="widgets"
data="{{items}}">
</firebase-query>
Bを使用すると、オブジェクトが読み込まれることを期待していitems
ますが、items
オブジェクトは null です。ただし、ブラウザーを手動で (ログアウトせずに) 更新すると、要素は期待どおりに動作します。ただし、ログアウトすると(ログアウト中に更新すると)、再度リロードするまで問題が再発します。ここで説明されているように、アプリがリセットされないという事実の一部が原因で、ログアウトしてから再度ログインしても問題が再発しないと思います。
なぜAが機能するのですか? しかし、Bではありませんか?また、B を機能させるには、 Bにどのような変更を加える必要がありますか? widgets
(パスからのパスを保存したいので、root/widgets/
その詳細をusers/...
パスの下に保存する必要はありません。
以前の失敗した試行
私の現在の (証明されていない) 理論は、Bの場合(URL が定数/静的である場合、つまりwidgets/
)firebase-query
はある種の競合状態に関与するというものです。ライフサイクルイベントの後にのみデータを取得し、データの再取得を試みません。一方、属性のデータバインディングに基づいてパスが動的に更新されると、 は再取得を試みfirebase-query
ますpath
(つまり、path="users/[[user.uid]]/widgets"
)。この理論は正しいですか?それとも他に何か原因があるのでしょうか? イベント後にデータを強制的に取得する必要がありますか? もしそうなら、どうすればこれをすべて達成できますか?
次のアイデアを試してみましたが、成功しませんでした。
ハuser: {
type: Object,
notify: true,
observer: '_userChanged',
},
_userChanged: function() {
this.$.query.path = 'widgets';
var items = this.$.query.ref.child('widgets');
this.set('items', items);
},
D
<firebase-query
id="query"
...
path="[[path]]"
data="{{items}}">
</firebase-query>
<script>
...
properties: {
path: {
type: String,
value: function() {
return 'widgets';
},
}
},
...
</script>
また、Polymer Slack サイトで、@will-in-china は次のように述べています。
初めてデータをロードするときに問題が発生しました。同じパスへの参照が複数ない場合、この問題は発生しないことがわかりました。
path="widgets"
要素 (およびアプリ)内の要素内のパスへの参照が 1 つしかないため、このコンテキストでそれが何を意味するのかわかりませんfirebase-query
。