为什么当我初始化两个查看器时,我的自定义 ToolbarExtension 没有注册? (附一件作品)

问题描述 投票:0回答:1

我有一个自定义扩展,它在默认查看器工具栏中添加了 3 个按钮,它们工作得很好,但现在我必须在我的应用程序中初始化两个查看器,以便将来在其中加载模型,现在我收到了这个错误:

Uncaught (in promise) Extension not found: ToolbarExtension. Has it been registered(1)?

是的,它已注册(我之前用过)。

这很好奇,因为如果我从扩展数组中删除

ToolbarExtension
并在代码中调用
await viewer.loadExtension("ToolbarExtension")
,它可以工作,但我不想这样做,因为它有一个延迟执行,我想像以前一样工作

观察:只有主查看器使用扩展进行初始化,如果我删除第二个查看器初始化,错误就会消失并且可以完美运行。

autodesk-viewer autodesk
1个回答
0
投票

我整理了以下快速测试,并且我能够在两个查看器中加载相同的扩展:

<!DOCTYPE html>
<html>

<head>
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=no" />
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/style.css">
    <script src="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/viewer3D.js"></script>
</head>

<body style="margin: 0; height: 100vh;">
    <div id="viewer1" style="position: absolute; left: 0; right: 0; top: 0; height: 50%;"></div>
    <div id="viewer2" style="position: absolute; left: 0; right: 0; bottom: 0; height: 50%;"></div>
    <script>
        class MyExtension extends Autodesk.Viewing.Extension {
            constructor(viewer, options) {
                super(viewer, options);
            }

            load() {
                return true;
            }

            unload() {
                return true;
            }

            onToolbarCreated() {
                let group = this.viewer.toolbar.getControl('my-toolbar-group');
                if (!group) {
                    group = new Autodesk.Viewing.UI.ControlGroup('my-toolbar-group');
                    this.viewer.toolbar.addControl(group);
                }
                const button = new Autodesk.Viewing.UI.Button('my-button');
                button.setToolTip('My Button');
                button.onClick = () => alert('Hello World!');
                group.addControl(button);
            }
        }

        Autodesk.Viewing.theExtensionManager.registerExtension('MyExtension', MyExtension);

        Autodesk.Viewing.Initializer({ env: 'Local' }, function () {
            const config = {
                extensions: ['MyExtension']
            };
            const viewer1 = new Autodesk.Viewing.GuiViewer3D(document.getElementById('viewer1'), config);
            viewer1.start();
            // Load some URN into viewer1
            const viewer2 = new Autodesk.Viewing.GuiViewer3D(document.getElementById('viewer2'), config);
            viewer2.start();
            // Load some URN into viewer2
        });
    </script>
</body>

</html>

也许您的代码中还有其他内容导致了此问题?

© www.soinside.com 2019 - 2024. All rights reserved.