在用户登录事件后第一次加载页面时,我想items用存储在我的 Firebase 中的一组对象填充属性。
A实现了我想要的行为。
一个<firebase-query
id="query"
...
path="users/[[user.uid]]/widgets"
data="{{items}}">
</firebase-query>
B没有。
乙<firebase-query
id="query"
...
path="widgets"
data="{{items}}">
</firebase-query>
使用B时,我希望看到items对象填充,但items对象为空。但是,如果我手动刷新浏览器(不注销),则该元素的行为符合预期。但是,如果我注销(然后在注销时刷新),问题会再次出现,直到我再次重新加载。如果我只注销然后重新登录,问题不会再次出现,我认为,部分原因是应用程序没有按照此处所述重置。
为什么A有效?但不是B吗?我必须对B进行哪些修改才能使其正常工作?(因为我想存储widgets来自root/widgets/路径的信息,而不必在users/...路径下存储该详细信息。
以前不成功的尝试
我目前的(未经证实的)理论是,在B的情况下(当 URL 是常量/静态时,即widgets/)firebase-query涉及某种竞争条件;并且仅在某些生命周期事件之后获取数据,并且不会尝试重新获取数据。另一方面,当基于属性中的数据绑定(即)动态更新路径时,firebase-query 确实会尝试重新获取。这个理论正确吗?还是有其他原因?在某些事件之后我是否需要强制获取数据?如果是这样,我该如何完成这一切?pathpath="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。