javascript - Bagaimana untuk memasukkan data anak baru dalam aplikasi web Firebase?
Saya sedang membina aplikasi pangkalan data kereta yang mudah. Apabila pengguna menambah kereta baru, ia akan mencipta data JSON berikut dengan medan kosong untuk galeri:
{
"name": "Cars",
"gallery": [{
"img": "http://",
"title": "BMW"
}, {
"img": "http://",
"title": "Lexus"
}, {
"img": "http://",
"title": "Ferrari"
}],
"pageId": "23",
"storeURL": "/app/cars/gallery"
}
Sekarang apa yang saya mahu lakukan dalam aplikasi ialah jika seorang pengguna menambah imej galeri baru, ia harus menambah anak baru selepas gambar galeri terakhir. Jadi selepas Ferrari ia harus menyisipkan objek baru. Saya nampaknya tidak dapat melakukan ini kerana setiap tutorial membawa ke jalan buntu dan juga dokumen rasmi Google menyatakan bahawa set() akan menggantikan semua data jadi jika anda menggunakan update() ia akan menambah dan dalam kes ini ia tidak menambah.
Kod ini memadam semua data:
function add(){
var data = [
{
title: 'Mercedes',
img: 'http://'
}
]
var postData = {
pageGallery: data
};
var updates = {};
updates['/app/cars/'] = postData;
firebase.database().ref().update(updates);
console.log('New car added');
}
Dan jika saya mengubah dan menambah anak itu:
firebase.database().ref().child('gallery').update(updates);
Ia tidak melakukan apa-apa terhadap data. Bolehkah anda tolong?
Jawapan #1
Lihat pos blog ini mengenai pelbagai sebab untuk tidak menggunakan tatasusunan dalam Pangkalan Data Firebase kami. Baca sekarang, saya akan menunggu di sini...
Selamat kembali. Sekarang bahawa anda tahu mengapa pendekatan anda sekarang akan membawa kepada masa yang sukar, mari kita lihat bagaimana anda sepatutnya memodelkan data ini. Catatan blog itu sudah memberitahu anda tentang ID tolak, yang merupakan pendekatan Firebase yang sangat berskala dan sedia untuk luar talian untuk koleksi seperti array.
Seperti yang diterangkan dalam dokumentasi kami mengenai membaca dan menulis senarai data, anda boleh menambah item ke dalam senarai dengan memanggil push().
Jadi jika ini menghasilkan sebuah kereta:
function addStore(){
var rootRef = firebase.database().ref();
var storesRef = rootRef.child('app/cars');
var newStoreRef = storesRef.push();
newStoreRef.set({
name: "Cars",
"pageId": "23",
"storeURL": "/app/cars/gallery"
});
}
Kemudian untuk menambah imej ke galeri kedai tersebut:
var newCarRef = newStoreRef.child('gallery').push();
newCarRef.set({
title: 'Mercedes',
img: 'http://'
})
Ini akan menambah kereta/gambar baru di hujung galeri (membuat galeri jika ia belum wujud).
Jawapan #2
Jika seseorang mahukannya Dengan Pengendalian Ralat :
var rootRef = firebase.database().ref();
var storesRef = rootRef.child('Lorelle/Visitors');
var newStoreRef = storesRef.push();
newStoreRef.set($scope.CarModal,
function(error) {
//NOTE: this completion has a bug, I need to fix.
if (error) {
console.log("Data could not be saved." + error);
Materialize.toast('Error: Failed to Submit' + error, 2000);
} else {
console.log("Data saved successfully.");
Materialize.toast('Data Submitted, Thank You.', 2000);
}
});
}
