在gundb中,链接get
来查找节点很方便。
例如:
grandparent.get("children").map().get("children").map().once(function(grandchild,id) {...})
但是,该函数在孙子上下文中被调用。如果我想获得对父级(或任何其他中间节点)的引用怎么办?
最简单的方法是分解查询:
grandparent.get("children").map().once(function(parent,id){
parent.get("children").map().once(function(child,id){
...
}
})
但这似乎不必要。我也曾尝试向map()
中添加一个函数,该函数将当前值存储在this
中,但这看起来很丑。
是否存在从先前链接的获取中保留或访问状态的首选方法?
答案 0 :(得分:0)
@Leo很好的问题。
目前有两种方法,如果您能想到更好的方法,请告诉我们!
this.back()
在值得一提的是:使用
gun.open()
之类的扩展API从父级向下加载完整文档。
this
或.on
回调中的 .once
是回调中数据的链上下文/引用。
您可以使用(2)做很多事情,例如:
如果您想从父母那里获取更多数据,可以进行this.back(2).get('some').get('other').get('data').once(cb)
。
但是,在大多数情况下,您只需要祖父母的路径,因为map
是动态的,您不知道路径是什么。
在这种情况下,您可以同步地从链元数据中获取该信息:
(假设路径为a.b.c.d.e
,我们在e上)
this.back('get') // 'e'
this.back(2).back('get') // 'c'
例如,如果要遍历每个“后退”链,例如说要从根目录获取完整路径:
forEach
前进:
var path = [];
this.back(function(at){ path.push(at.get) });
console.log(path.reverse().join('.'));
// 'a.b.c.d.e'
的文档和内部链元数据需要改进。 所有这些想法现在都可以在GUN上构建/扩展,即使.back()
的LOC链扩展少于50个! community很乐意帮助您构建这些扩展!
类似于 或类似的工具,例如将架构传递给父级,以及 这迅速扩展到GUN之上的其他查询引擎,例如SQL,Mango或实时订阅中已经存在的GraphQL!.open()
,但不是在链的下方加载文件,而是在链中将文件备份加载,只针对该隔离路径。< / p>
.open()
的替代版本仅加载架构中的项目,而不加载其下面的所有内容。