1

我一直在尝试使用 Firebase 设置一个简单的数据库来存储用户名。

现在正在运行一个 localhost 页面,其中包含一个输入字段和一个提交到 Firebase 的按钮。

我的 Firebase 代码是:

var myRootRef = new Firebase('https://myappname.firebaseio.com/');
var childRef = myRootRef.child('users');

然后在我的点击事件中我做:

childRef.push(_user);

这可行,但我最终在 Firebase 上得到以下结构:

{
  "users" : {
    "-J1aJh8xQCgYU23m5qWc" : "sdfsd",
    "-J1aJQ1g5dw25SCGTLlq" : "ad",
    "-J1aJPZET6j7Kn8-nIZR" : "ad",
    "-J1aJg_ZchLeEVdnJnTb" : "adam",
    "-J1aJQrC2T5CfT0bNgeY" : "aaa",
    "-J1aJQTguxhvrMqcI4uU" : "dddd"
  }
}

当我想要的是:

{
  "users" : {
    "user" : "sdfsd",
    "user" : "ad",
    "user" : "ad",
    "user" : "adam",
    "user" : "aaa",
    "user" : "dddd"
  }
}

阅读文档看起来我需要使用 setPriority 但传递一个数字会覆盖我以前的数据......如何像我想要的那样设置保存?谢谢你。

4

1 回答 1

1

如果您想要人类友好的名称,则需要手动生成它们。一种方法是创建一个计数器,例如,在/lastUser. 每次你想创建一个新用户时,你将使用 增加这个计数器transaction,然后使用set而不是创建用户push

var myRootRef = new Firebase('https://myappname.firebaseio.com/');
var childRef = myRootRef.child('users');
var counterRef = myRootRef.child('lastUser');
counterRef.transaction(function(current) {
  return current + 1;
}, function(err, committed, snapshot) {
  if (!err && committed) {
    childRef.child("user" + snapshot.val()).set("userdata");
  }
});

有关更完整的示例,请查看https://gist.github.com/anantn/4323981,您也可以使用相同的方法生成人类友好的用户 ID。

于 2013-08-23T21:25:24.100 回答