2016-11-05 101 views
1

大家好我在这里得到奇怪的行为。当用户点击一个按钮时,我尝试更新一个特定的子节点。这里是我的代码:Firebase Web更新()删除所有其他子节点

var updates2 = {}; 
var offer = { 
    minusAccandShare: 2, 
} 
updates2['/offerLight/' + keyReal] = offer; 
updates2['/offer/' + keyReal] = offer; 
return firebase.database().ref().update(updates2); 

一切正常正确的节点被更新,但在更新minusAccandShare一切都将被删除

的结构是这样的:

offer 
    jifdjsiavdas 
    minusAccandShare: -6 
    offerName: "Replacement" 
    offerText: "You have the choice to..." 
    ... 

它变成

offer 
    jifdjsiavdas 
    minusAccandShare: 2 

我使用了这种方法,就像firebase中描述的那样多次指导,它总是像魅力一样工作。但是,我用新的密钥创建了完整的新节点,所以没有什么可以删除的。

谢谢大家:d

回答

4

代码中发生的实际情况是:

您正在完全写入该键,从而擦除数据集中的整个属性。

updates2['/offer/' + keyReal] = offer; 

抹了在那个特定的键全部数据。

试试这个:

firebase.database().ref('offer/' + keyReal).update({ 
    minusAccandShare: 2, 
    }); 

这使您可以确保您更改指定的属性在你的火力点数据集。

我希望这有助于

+0

Ebenezer是正确的。在这种情况下,在更新时 - 即使使用“更新”功能而不是“设置” - 数据对象将被完全覆盖。在上面写下密钥后,我需要传递我的对象。 –

0

好像你应该firebase refs阅读起来。你似乎没有更新ref,所以你正在更新(可能是)根数据库对象(我从来没有通过一个空的参考Firebase,所以我不是100%确定使用的行为是什么firebase.database().ref()

我“编译”你的代码,所以你可以看到你传递什么空裁判:

var updates2 = {}; 

updates2['/offerLight/' + keyReal] = offer; 
updates2['/offer/' + keyReal] = offer; 

// Becomes... 

updates2 = { 
    '/offerLight/jifdjsiavdas': { 
    minusAccandShare: 2 
    }, 
    '/offer/jifdjsiavdas': { 
    minusAccandShare: 2 
    } 
} 

// So... 

return firebase.database().ref().update(updates2); 

// is sent as 

return firebase.database().ref().update({ 
    '/offerLight/jifdjsiavdas': { 
    minusAccandShare: 2 
    }, 
    '/offer/jifdjsiavdas': { 
    minusAccandShare: 2 
    } 
}) 

好像你实际上希望做的是引用的子节点jifdjsiavdas你会想要用这样的参考指向它:

firebase.database.ref('offer/' + keyReal).update(offer);