При первой загрузке страницы после входа пользователя в систему я хочу заполнить свойство items
набором объектов, хранящихся в моей Firebase.
A достигает желаемого поведения.
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, чтобы он заработал? (Потому что я хочу сохранить widgets
из пути root/widgets/
и не хранить эту информацию в пути users/...
.
Предыдущие неудачные попытки
Моя текущая (недоказанная) теория состоит в том, что в случае B (когда URL-адрес постоянный/статический, т. е. widgets/
) firebase-query
участвует в каком-то состоянии гонки. ; и извлекает данные только после некоторого события жизненного цикла и не пытается повторно извлечь данные. С другой стороны, firebase-query
делает попытку повторной выборки, когда путь динамически обновляется на основе привязки данных в атрибуте path
(т. е. path="users/[[user.uid]]/widgets"
). Верна ли эта теория? Или есть какая-то другая причина? Нужно ли мне обязательно извлекать данные после какого-то события? Если да, то как я могу выполнить все это?
Я пробовал следующие идеи без успеха.
Cuser: {
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"
внутри элемента firebase-query
.