如何使用 firebase-document 在 Polymer 2.x 的空 Firebase 节点处初始化 'settings'?
How to initialize 'settings' at an empty Firebase node in Polymer 2.x using firebase-document?
我想实现 <firebase-document>
来获取和应用用户设置。 I am using this page as a guide.
当我在 firebase 的 /users/{{userId}}/settings
节点加载没有数据的页面时,我希望看到对象 { new: 'initial', j: 5, o: 'N' })
加载到那里。但是,我实际上在我的 firebase 中看到节点没有变化。
我哪里做错了,我怎样才能达到我想要的行为?
settings.html
<firebase-document
path="/users/{{userId}}/settings"
data="{{data}}">
</firebase-document>
<script>
Polymer({
properties: {
uid: String,
data: {
type: Object,
observer: 'dataChanged'
}
},
dataChanged: function (newData, oldData) {
// if settings have not been set yet, initialize with initial value
if(!newData && !oldData){
this.set('data', { new: 'initial', j: 5, o: 'N' });
}
}
});
</script>
编辑:通过@HakanC 的评论回答问题:
Does {{userId}}
have a value when executed?
是的。
Is there data at the path /users/{{userId}}/settings
?
没有。用户首次登录时没有 /settings
节点。但我确实有在 /users/{{userId}}
处成功创建节点的代码。当此元素执行其脚本时,该节点存在。
Console log whether you arrive this.set
line.
我确实到达那里——多次。第一次,data
的记录值未定义。第二次,data
的记录值为 {}
.
你上面说的路径上没有数据,那么你需要改变if条件。类似于:
if(newData === undefined){
而不是;
if(!newData && !oldData){
编辑:
static get properties() { return {
uid: String,
data:{
type:Object,
value() {return{}; }
}
}
}
static get observers() { return [ 'dataChanged(data)' ]}
constructor() {
super();
}
ready() {
super.ready();
setTimeout(()=> {
this.set('data', undefined); //Retrieving data async from firebase.
},500)
}
dataChanged(data) {
// if data has not been set then, initialize with new value
console.log(data);
if(!data){
this.set('data', { new: 'initial', j: 5, o: 'N' });
}
}
我想实现 <firebase-document>
来获取和应用用户设置。 I am using this page as a guide.
当我在 firebase 的 /users/{{userId}}/settings
节点加载没有数据的页面时,我希望看到对象 { new: 'initial', j: 5, o: 'N' })
加载到那里。但是,我实际上在我的 firebase 中看到节点没有变化。
我哪里做错了,我怎样才能达到我想要的行为?
settings.html<firebase-document
path="/users/{{userId}}/settings"
data="{{data}}">
</firebase-document>
<script>
Polymer({
properties: {
uid: String,
data: {
type: Object,
observer: 'dataChanged'
}
},
dataChanged: function (newData, oldData) {
// if settings have not been set yet, initialize with initial value
if(!newData && !oldData){
this.set('data', { new: 'initial', j: 5, o: 'N' });
}
}
});
</script>
编辑:通过@HakanC 的评论回答问题:
Does
{{userId}}
have a value when executed?
是的。
Is there data at the path
/users/{{userId}}/settings
?
没有。用户首次登录时没有 /settings
节点。但我确实有在 /users/{{userId}}
处成功创建节点的代码。当此元素执行其脚本时,该节点存在。
Console log whether you arrive
this.set
line.
我确实到达那里——多次。第一次,data
的记录值未定义。第二次,data
的记录值为 {}
.
你上面说的路径上没有数据,那么你需要改变if条件。类似于:
if(newData === undefined){
而不是;
if(!newData && !oldData){
编辑:
static get properties() { return {
uid: String,
data:{
type:Object,
value() {return{}; }
}
}
}
static get observers() { return [ 'dataChanged(data)' ]}
constructor() {
super();
}
ready() {
super.ready();
setTimeout(()=> {
this.set('data', undefined); //Retrieving data async from firebase.
},500)
}
dataChanged(data) {
// if data has not been set then, initialize with new value
console.log(data);
if(!data){
this.set('data', { new: 'initial', j: 5, o: 'N' });
}
}