我想使用firebase-document
将数据保存到我的firebase。看来数据已正确保存但会立即被覆盖。以下是我得到的错误......
与内存同步。
从Firebase值更新数据:对象{comment:“foo”,日期:“bar”,id:“ - XXXXxxxxXXXXXXxxxx”,商家:“baz”,状态:“bat”......}
APP-存储behavior.html:368与内存同步。
APP-存储behavior.html:350
从Firebase值更新数据:对象{date:“”}
在日志中查看第二段?这是我不希望看到的。可能是什么导致了这个?我能做些什么来实现我想要的行为?这是我的代码......
X-el.html<firebase-document
id="document"
app-name="my-firebase"
data="{{editableItem}}"
log>
</firebase-document>
...
save: function() {
return this.$.document.save(this.itemsPath);
}
查看第二个同步到内存日志。它描述了写一个基本上是空对象:{date:""}
到内存(firebase)。此操作将覆盖上一个对象:{comment: "c", date: "", merchant: "c", status: "new", total: "3"}
写入同一位置。
Here is the firebase-document.html file in question
以下是相关的代码部分。
火力点,document.htmlattached: function() {
this.__refChanged(this.ref, this.ref);
},
detached: function() {
if (this.ref) {
this.ref.off('value', this.__onFirebaseValue, this);
}
},
observers: [
'__refChanged(ref)'
],
...
__refChanged: function(ref, oldRef) {
if (oldRef) {
oldRef.off('value', this.__onFirebaseValue, this);
}
if (ref) {
ref.on('value', this.__onFirebaseValue, this);
}
},
__onFirebaseValue: function(snapshot) {
var value = snapshot.val();
if (value == null) {
value = this.zeroValue;
}
if (!this.new) {
this.async(function() {
this.syncToMemory(function() {
this._log('Updating data from Firebase value:', value); // Causes overwrite
this.set('data', value);
});
});
}
}
答案 0 :(得分:1)
this.$.document.save(this.itemsPath)
的副作用是path
的{{1}}将重置为指向您在数据库中创建的新项目。但是,此firebase-document
代码只能绑定到path
,因此每次保存数据时,您都会将组件重新分配到数据库中没有数据的位置。双向绑定和/或不绑定firebase-document
,或使用path
中的明确key
,以便匹配save(parentPath, key)
的目标应该清除您的问题。
答案 1 :(得分:1)
我之前遇到类似的问题'与内存同步'的问题。我所做的是直接使用firebase.database函数(如add和set)进行更改,并且从不尝试对&lt;中的数据进行更改。 firebase-document&gt;。我使用&lt; firebase-query&gt;代替。如:https://firebase.googleblog.com/2014/05/handling-synchronized-arrays-with-real.html
中所述我们必须将下载的数据/数组视为ReadOnly。并使用firebase.database函数直接在firebase中进行更改。以这种方式&lt; firebase-query&gt;听取并更新自己,这是一个循环。为了使用ID修改特定的更改,有一个添加的arrayfromquery [0]。来自&lt;的$ key数据。 firebase-query&gt;您可以使用。我想这不是完全相关的,但我希望它有所帮助:)