2017-01-15 162 views
3

我已經開始使用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);

一個其他頁面,我有這樣的事情 -

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); 
 
    
 
});

後來,我想使用的選項值類似 -

var user = gun.get(selectedUserOption.value);

不幸的是,我無法工作,如何拿到鑰匙。它似乎以節點對象的形式保存爲「#」,但我無法確定如何訪問此值。

回答

3

偉大的問題!大多數回調中的第二個參數具有您試圖獲取的數據的字段或鍵。從你的例子:

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); 
}); 

現在你可以做users.path(selectedUserOption.value)搶同一個用戶參考/鏈方面!

我很高興聽到你在享受使用槍:)我很想看到你的項目演示!分享心靈?

+1

馬克,感謝您的快速響應,也感謝您創建和共享GunDB!我很樂意分享我的項目,但現在還只有幾個本地主機上的表單。我試過使用ID作爲第二個參數。它使用'users.map(函數(用戶,ID))',而不是在使用'users.map().val(函數(用戶,ID))''時。我用http://jsbin.com/ziremuquro/edit?js,console進行測試。 – user12700

+1

我還是不太瞭解GunDB,所以我掙扎了一下。如果我使用val(),我看不到該ID。如果我使用map(),我會得到重複的。不過,我管理了一個黑客解決方案。爲了獲得用戶的ID,我做了以下操作:var users = gun.get('users'); users.map()。val(function(user){console.log(user ._ ['#'];});'這不太好,我敢肯定有暗示,但它正在工作...... – user12700

+0

確實,這是一個錯誤 - 謝謝你指出這一點,現在你的破解將會起作用,但我會嘗試更新答案,發佈補丁或其他內容,但可能需要一週左右的時間 - 真的本週繁忙,跳轉到https://gitter.im/amark/gun,有一羣人可以幫助那裏(儘管確保也將問題發佈到StackOverflow是首選)。 – marknadal