与thisC++中的关键字类似,我想要有一个QML元素将自己传递给JS函数,或者让它在另一个元素上设置属性.这可能吗?
例如:
Rectangle{
id:theParent
property var theElement
SomeElement{
id:theChild
MouseArea {
anchors.fill:parent
onClicked: {
someJsFunction(*whatGoesHere*)
parent.theElement=*whatGoesHere*
}
}
Run Code Online (Sandbox Code Playgroud)
或者,考虑一下:
Rectangle{
id:theParent
property var theElement
SomeElement{
id:theChild
}
Run Code Online (Sandbox Code Playgroud)
然后,在SomeElement.qml中:
Rectangle{
MouseArea {
anchors.fill:parent
onClicked: {
someJsFunction(*whatGoesHere*)
parent.theElement=*whatGoesHere*
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,*whatGoesHere*它将是调用它们的SomeElement的实例.
这在QML中是否可行?我认为该id属性是有意义的,但根据文档,你无法查询该id字段的值,无论如何,id如果我SomeElement在一个单独的文件中描述,那么就不可用了,并且上面的whatGoesHere处理出现在那个单独的文件而不是特定的实例.
The*_*roo 11
我有两个补充建议:
首先,对于单次使用,传递ID,因为它基本上是指向项目的指针:
MouseArea {
id: myClicker;
onClicked: { callFunc (myClicker); }
}
Run Code Online (Sandbox Code Playgroud)
然后,如果您需要多个项目来共享此行为,这意味着您正在使用MVC,因此ID将完全相同:
Repeater {
model: 100;
delegate: MouseArea {
id: myClicker;
onClicked: { callFunc (myClicker); }
}
}
Run Code Online (Sandbox Code Playgroud)
这是经典部分.
但是如果你创建自己的组件要更好,请记住创建一个"自我"帮助属性来正确执行'this'工作:
MouseArea { // component root definition
id: base;
property var self : base; // bind self on the I
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
Repeater {
model: 100;
delegate: MyComponent {
onClicked: { callFunc (self); }
}
}
Run Code Online (Sandbox Code Playgroud)
根据需要随时使用!
| 归档时间: |
|
| 查看次数: |
5854 次 |
| 最近记录: |