在长链接上正确使用 addProperty()

Use addProperty() on long links properly

如何在长 link 上使用 addProperty() 来显示短 link 文本?

具体我想从:

Link 到公司 https://en.wikipedia.org/wiki/Autodesk_Media_and_Entertainment

至:

Link 到公司 Link

这在 属性 面板中可行吗?

内置 属性 面板试图检测“看起来像 URL”的 属性 值并将它们转换为实际的 <a> link,但它没有不会给你一个方法来给那些 link 一个不同的名字。

为了实现您想要的效果,您必须 class ViewerPropertyPanel class 并重写 displayProperty 方法,该方法负责将 属性记录到实际的HTML个元素中:

displayProperty(property, parent, options) {
    const [nameEl, valueEl] = super.displayProperty(property, parent, options);
    if (property.value.startsWith('https://')) {
        valueEl.innerHTML = `<a href="${property.value}">Link</a>`;
    }
}

这是实现自定义 属性 面板的完整查看器扩展,包括。 link 自定义:

class CustomPropertyPanelExtension extends Autodesk.Viewing.Extension {
    constructor(viewer, options) {
        super(viewer, options);
    }

    async load() {
        this.viewer.addEventListener(Autodesk.Viewing.EXTENSION_LOADED_EVENT, (ev) => {
            if (ev.extensionId === 'Autodesk.PropertiesManager') {
                const ext = this.viewer.getExtension('Autodesk.PropertiesManager');
                ext.setPanel(new CustomPropertyPanel(this.viewer));
            }
        });
        return true;
    }

    unload() {
        return true;
    }
}

class CustomPropertyPanel extends Autodesk.Viewing.Extensions.ViewerPropertyPanel {
    constructor(viewer) {
        super(viewer);
    }

    displayProperty(property, parent, options) {
        const [nameEl, valueEl] = super.displayProperty(property, parent, options);
        if (property.value.startsWith('https://')) {
            valueEl.innerHTML = `<a href="${property.value}">Link</a>`;
        }
    }

    setProperties(props, options) {
        super.setProperties(props, options);
        this.addProperty('Prop A', 'https://forge.autodesk.com', 'Category 1');
    }

    setAggregatedProperties(props) {
        super.setAggregatedProperties(props);
        this.addProperty('Prop A', 'https://forge.autodesk.com', 'Category 1');
    }
}

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