扩展 inspector 如何保存 ui-component

最近在看 3.5 里面关于扩展 inspector 的文档:

https://docs.cocos.com/creator/manual/zh/editor/extension/inspector.html

这里有个问题想请教下,我照着文档自己创建了一个组件:

@ccclass('CustomComponent')
export class CustomComponent extends Component {

    @property(SpriteFrame)
    sprite: SpriteFrame = null;
}

然后给他绑了个 inspector 脚本:

export function ready(this: Selector<typeof $> & typeof methods) {
    this.elements = {
        sprite: {
            update: (element: any, dump: any) => {
            },
            create(dump: any) {
                const prop = document.createElement('ui-prop');
                prop.dump = dump;

                const label = document.createElement('ui-label');
                label.setAttribute('slot', 'label');
                setLabel(label, dump);

                const content = document.createElement('ui-component');
                content.setAttribute('slot', 'content');
                content.setAttribute('droppable', 'cc.SpriteFrame');
                prop.appendChild(label);
                prop.appendChild(content);

                prop.addEventListener('confirm', async (event) => {
                    // prop.dump ???
                    // dispatch('change-dump'); ??
                });
                return prop;
            }
        }
    };
}

我这里参照文档写写了一部分,实际运行效果没有问题,组件可以出现,并且只接受 SpriteFrame 类型组件的拖放。
但是问题是,当我把组件拖上去后, confirm 消息会触发,可是我实在不清楚,这个部分应该怎么写,才能把拖放上来的组件给保存下来。

文档里子给的是一个比较简单的 string 的例子,那个我看懂了,可是这个实在不清楚。

希望有大佬可以指点一下,多谢了。

3.0 如果 inspector 没有特殊 UI 需求(比如 widget 那种样式), 直接用引擎自带的装饰器就够了,可以参考引擎代码内置组件的写法

所以具体怎么保存设置的值呢.我看文档也是很懵逼.

你看的是这个文档吗? 装饰器使用 · Cocos Creator

就是类似2.x 的inspector啊,和装饰器没太大联系吧

我是想在组件的属性面板.比如我勾选了A 或者选择了A 就隐藏B的UI 选择了B 就隐藏A的UI 显示B 是组件属性面板的UI

搞明白了.能知道怎么用了

自定义inspector,要保存数据两种方式
简单版:获取选中节点 -> 场景脚本通过 uuid 从 cce 拿到节点 -> 拿到当前组件直接赋值
复杂版:通过 set-property 消息进行赋值,具体使用参考论坛其他帖子

未在论坛找到相关帖子

你好,能说明下具体要怎么使用不?我也遇到这个问题了,设置完一直不生效

装饰器有个visible

装饰器有个visible,继承重写就行

是指 @property({ visible: true }) 这个吗?这个我有添加,但是没啥用的样子

@property({ type: cc.SpriteFrame, displayName: “选中纹理”, visible: function (this: ToggleItem) { return this._style_model == StyleModel.ReplaceSprite } })

好的,感谢,我去试试