MyObj
为以下组件:
Item {
id:root
signal foo()
property string bar: "bar"
Component.onCompleted: root.foo()
}
通过Qt.createComponent(...)
->comp.createObject(...)
可以连接JS函数到所有信号,除了destruction
代码:
var comp = Qt.createComponent('MyObj.qml');
var finish = () => {
if(comp.status === Component.Error) {
console.log("Error loading component:", comp.errorString())
return
}
if(comp.status !== Component.Ready) {
console.log("Component not ready")
return
}
var obj = comp.createObject(mainWindow, {})
if(obj === null) {
console.log('Error creating object')
return
}
obj.foo.connect(() => console.log('foo!'))
obj.barChanged.connect(() => console.log('barChanged!'))
obj.destruction.connect(() => console.log('destruction!'))
}
if(comp.status !== Component.Loading)
finish();
else
comp.statusChanged.connect(finish);
产生错误:
独有:/主要。qml:32: TypeError: Cannot call method 'connect' of undefined
正好在obj.destruction.connect(...)
的那一行文档没有提到任何这样的限制。
怎么了?
把:
Component.onDestruction: console.log("#destruction")
在MyObj
工作正常,但这不是我需要的。
我没有意识到JS需要与QML相同的语法来访问超类的属性。
下面的代码就可以了:
obj.Component.destruction.connect(() => console.log('destruction!'))