自定义一个控件,把子控件中回调的参数回传到应用层
自定义组件定义代码:
class Options {
id: string = ''
onLoad: Function =()=>{};
}
@Builder
function overBuilder(params: Options) {
XComponent({
id: params.id,
libraryname: 'irtcrender',
type: XComponentType.TEXTURE
}).onLoad((iRtcRender: IRtcRender) => {
if (params.onLoad) {
params.onLoad(iRtcRender);
}
}).width('100%')
.height('100%')
}
@Component
export struct IRtcComponent {
@Prop Id: string;
@Prop onLoad: Function;
build() {
overBuilder({ id: this.Id, onLoad: this.onLoad })
}
}
应用调用代码:
IRtcComponent({
Id: 'localRender',
onLoad:(iRtcRender: IRtcRender) => {
this.mLocalRender = iRtcRender;
Logger.info(TAG, 'onLoad', `this.mLocalRender = ${JSON.stringify(this.mLocalRender)}`);
}
})
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.backgroundColor(Color.Black)
.width('512px')
.height('640px')
运行时crash日志:
Pid:22270
Uid:20020057
Reason:TypeError
Error name:TypeError
Error message:@Component '@Component 'IRtcComponent'[62]': Illegal variable value error with decorated variable undefined 'onLoad': failed validation: 'undefined, null, number, boolean, string, or Object but not function, not V3 @observed / @track class, attempt to assign value type: 'function', value: 'undefined'!
Stacktrace:
at varValueCheckFailed (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:2173:1)
at checkIsSupportedValue (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:4883:1)
at SynchedPropertyOneWayPU (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:5371:1)
at SynchedPropertyObjectOneWayPU (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:0:1)
at IRtcComponent (irtc/Index.ets:98:1)
at anonymous (demo/src/main/ets/pages/Index.ets:622:34)
at updateFunc (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:6722:1)
at observeComponentCreation2 (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:6763:1)
at anonymous (demo/src/main/ets/pages/Index.ets:622:34)
应该怎么才可以把iRtcRender传给应用层
可以参考此段demo