如何从GunDb节点获取密钥

use*_*700 5 javascript gun gundb

我已经开始使用 GunDB 并且我真的很喜欢它。我可以轻松创建复杂的关系,而不会出现与关系数据库或文档数据库相关的许多问题。

不幸的是,我遇到了一个看似简单的问题。

我已成功创建节点,但后来想要获取密钥,以便将它们嵌入到页面上。例如,在一个页面上我使用表单添加用户。然后,在另一个页面上,我想获取用户列表并创建一个选择输入,将其名称列为文本,将键列为值。

例如,在第一页我有类似的内容 -

var user1 = gun.get('user/1').put({name: user1});
var user1 = gun.get('user/2').put({name: user2});
var users = gun.get('users');
users.set(user1);
users.set(user2);
Run Code Online (Sandbox Code Playgroud)

在另一页上,我有类似的东西 -

var users = gun.get('users');

users.map().val(function(user) {
  var userOption = document.createElement("option");
  userOption.text = user.name;
  userOption.value = user.key; // for example, though this does not work
  userSelect.appendChild(userOption);
  
});
Run Code Online (Sandbox Code Playgroud)

后来,我想使用选项值,例如 -

var user = gun.get(selectedUserOption.value);
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不知道如何获得钥匙。它似乎在节点对象中保存为“#”,但我无法确定如何访问该值。

mar*_*dal 6

好问题!大多数回调的第二个参数包含您尝试获取的数据的字段或键。从你的例子来看:

users.map().val(function(user, ID) {
  var userOption = document.createElement("option");
  userOption.text = user.name;
  userOption.value = ID; // for example, this now should work
  userSelect.appendChild(userOption);
});
Run Code Online (Sandbox Code Playgroud)

现在您可以users.path(selectedUserOption.value)获取相同的用户引用/链上下文!

我很高兴听到您喜欢使用枪:)我很想看看您项目的演示!心灵分享?

  • 马克,感谢您的快速回复,也感谢您创建和分享 GunDB!我很乐意分享我的项目,但现在还处于早期阶段,本地主机上只有几个表单。我尝试过使用 ID 作为第二个参数。它在使用“users.map(function(user, ID))”时有效,但在使用“users.map().val(function(user, ID))”时无效。我使用 http://jsbin.com/ziremuquro/edit?js,console 进行测试。 (2认同)
  • 我仍然不太了解 GunDB,所以我有点挣扎。如果我使用 val(),我看不到 ID。如果我使用map(),我会得到重复项。然而,我管理了一个黑客解决方案。为了获取用户的 ID,我执行了以下操作:`var users =gun.get('users'); users.map().val(function(user) {console.log(user._['#'];});` 这不太漂亮,我确信有影响,但它正在工作...... (2认同)
  • 哦,确实,这是一个错误 - 感谢您指出这一点。你的黑客现在可以工作,但我会尝试更新答案,发布修复程序,或其他东西。不过可能需要一周左右的时间——这周真的很忙。跳转到 https://gitter.im/amark/gun,那里也有很多人可以提供帮助(不过最好确保也将问题发布到 StackOverflow)。 (2认同)