Firebase - 对象与数组并返回 .key()
Firebase - Object vs Array and Returning a .key()
我正在使用 firebase + angularfire 进行一个项目,该项目涉及多个用户同时编辑数据(这将使对象成为理想对象)以及需要快速排序和过滤数据即时(阵列的理想选择)。
那么,对我来说是不是更好:
1) 使用 FirebaseObject 然后使用 angular toArray 过滤器进行排序
2) 使用 FirebaseArray 并确保使用 $add 以确保使用唯一 ID(甚至将推送 ID 存储为推送对象本身的 属性)。
目前,我们使用的是第二个选项,这引出了我的第二个问题:
当我使用 $push 时,如何 return 将 ref.key() 返回给控制器?
修改 API 指南中的示例:
var list = $firebaseArray(ref);
var addItem = function(itemDataObject) {
list.$add(itemDataObject).then(function(ref) {
var id = ref.key();
console.log("added record with id " + id);
list.$indexFor(id); // returns location in the array
});
};
如何在调用 addItem 函数时让该 id 变量被 return 编辑?即使我在 list.$add 函数外声明一个变量并在函数内设置变量,我也会得到一个未定义的结果。
一个可能的问题似乎是 id
的变量声明,即使该变量是全局声明的。
例如:
var id;
function setIDVal1(){
var id=10;
}
function setIDVal2(){
id=101;
}
function getIDVal(){
alert(id);
}
查看此 fiddle for the local variable issue & check this fiddle 示例以获取 ID。
一种方法是回退到使用 Firebase 的常规 JavaScript SDK。
var list = $firebaseArray(ref);
var addItem = function(itemDataObject) {
var newItemRef = ref.push(itemDataObject);
var id = newItemRef.key();
console.log("added (or still adding) record with id " + id);
return id;
};
但是,如果您需要新参考的 key()
而不仅仅是显示它,则需要等到它可用。
在那种情况下,最简单的方法是 return 承诺:
var list = $firebaseArray(ref);
var addItem = function(itemDataObject) {
return list.$add(itemDataObject);
};
接下来会发生什么,取决于调用代码和您希望它做什么。
由于您想 return 异步操作的结果,您可能会受益于阅读我的回答和其中的链接:Asynchronous access to an array in Firebase
我正在使用 firebase + angularfire 进行一个项目,该项目涉及多个用户同时编辑数据(这将使对象成为理想对象)以及需要快速排序和过滤数据即时(阵列的理想选择)。 那么,对我来说是不是更好:
1) 使用 FirebaseObject 然后使用 angular toArray 过滤器进行排序
2) 使用 FirebaseArray 并确保使用 $add 以确保使用唯一 ID(甚至将推送 ID 存储为推送对象本身的 属性)。
目前,我们使用的是第二个选项,这引出了我的第二个问题: 当我使用 $push 时,如何 return 将 ref.key() 返回给控制器? 修改 API 指南中的示例:
var list = $firebaseArray(ref);
var addItem = function(itemDataObject) {
list.$add(itemDataObject).then(function(ref) {
var id = ref.key();
console.log("added record with id " + id);
list.$indexFor(id); // returns location in the array
});
};
如何在调用 addItem 函数时让该 id 变量被 return 编辑?即使我在 list.$add 函数外声明一个变量并在函数内设置变量,我也会得到一个未定义的结果。
一个可能的问题似乎是 id
的变量声明,即使该变量是全局声明的。
例如:
var id;
function setIDVal1(){
var id=10;
}
function setIDVal2(){
id=101;
}
function getIDVal(){
alert(id);
}
查看此 fiddle for the local variable issue & check this fiddle 示例以获取 ID。
一种方法是回退到使用 Firebase 的常规 JavaScript SDK。
var list = $firebaseArray(ref);
var addItem = function(itemDataObject) {
var newItemRef = ref.push(itemDataObject);
var id = newItemRef.key();
console.log("added (or still adding) record with id " + id);
return id;
};
但是,如果您需要新参考的 key()
而不仅仅是显示它,则需要等到它可用。
在那种情况下,最简单的方法是 return 承诺:
var list = $firebaseArray(ref);
var addItem = function(itemDataObject) {
return list.$add(itemDataObject);
};
接下来会发生什么,取决于调用代码和您希望它做什么。
由于您想 return 异步操作的结果,您可能会受益于阅读我的回答和其中的链接:Asynchronous access to an array in Firebase