2016-11-05 31 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);