此问题之前已被问过,但所提供的解决方案似乎都无法解决我的问题:
我在Firebase上有一系列数据,我在我的应用中循环生成内容,使用" for"循环,因此索引值。这适用于预定的数据集,因为ID是简单的数组数字,但是当用户添加一些新数据(使用push()添加到数组中时),firebase会创建一个唯一的节点密钥(例如-KyWRU7RRCE_V1w_OiZx)由于某种原因阻止我的循环工作的新数据集(控制台中没有显示错误)。
如果我去firebase并手动确保新数据集具有数值,则循环再次开始工作。如何使用当用户将新数据推送到数组时,生成的密钥是数字?我试过这个:
// Push new routine to Firebase.
var firebaseRef = firebase.database().ref();
var createdExercise = JSON.parse(localStorage.newRoutine);
$("#save").click(function()
{
firebaseRef.child("workouts").key(some_indexed_value).push(createdExercise);
});
但是控制台返回以下错误:Uncaught TypeError:firebaseRef.child(...)。key不是函数。
如果它有用,这是我正在使用的循环:
// Initialize Firebase.
firebase.initializeApp(config);
// Reference data.
var dbRef = firebase.database().ref().child("workouts");
// Sync with Firebase in real time.
dbRef.on("value", snap =>
{
var workouts = snap.val();
for (var i = 0; i < workouts.length; i++)
{
var routine = workouts[i].title;
var time = 3;
var exercises = workouts[i].exercises;
var icons;
$("#cardList").append(createCards(routine));
}
});
答案 0 :(得分:1)
回答你的问题是使用.set()
代替.push()
这样的
firebaseRef.child("workouts").child(some_indexed_value).set(createdExercise);
这将使用您的自定义键在锻炼下创建一个节点。
但建议使用push keys
并使用forEach()
方法获取结果,而不是使用for loop