从 dbid 获取片段 ID

Posted

技术标签:

【中文标题】从 dbid 获取片段 ID【英文标题】:Getting fragment ids from a dbid 【发布时间】:2019-10-10 23:49:09 【问题描述】:

类型定义、文档和查看器行为之间看似不一致的问题让我有点挣扎。

我已经为颜色元素编写了一个简单的扩展(无论如何我都无法使用它,但那是 different question)。

当我尝试使用InstanceTree#enumNodeFragments 方法获取给定节点的片段时,我得到一个空数组:

getFragmentsForNode(dbId: number): number[] 
    const fragments: number[] = [];
    this.viewer.model.getInstanceTree().enumNodeFragments(dbId, (fragId) => fragments.push(fragId));
    return fragments;

文档没有说明此回调的预期参数,但从在线示例中我猜签名类似于以下内容:

enumNodeFragments(dbId: number, callback: (fragId: number) => void, recursive?: boolean): void;

打字稿定义令人困惑,因为它将node: any列为第一个参数,这意味着它可能不是 id 而是其他东西。

当我对任何元素运行此命令时,我总是得到一个空数组,这有点令人费解,因为无法访问片段我无法真正设置颜色等。

【问题讨论】:

【参考方案1】:

很遗憾,我无法使用有效的 dbid 和模型重现该问题 - 请参阅实时示例 here

viewer.model.getInstanceTree().enumNodeFragments(dbId, fragId=> console.log(fragId));

您是否提供了有效的 dbid?

【讨论】:

我从一个选择事件中得到了 dbid,所以它肯定是有效的。

以上是关于从 dbid 获取片段 ID的主要内容,如果未能解决你的问题,请参考以下文章

使用片段从数据库 SQLite 获取数据时出错

如果标签存在,beautifulsoup 从片段中获取最后一个标签

没有使用 navController.currentDestination?.id 获取当前片段 ID

如何从该片段中的 onItemSelectedListener 中获取微调器单击的项目?

在 RecyclerView 适配器中调用片段并获取 id

从 Apollo 缓存中读取特定类型的所有片段