与C ++中的this
关键字类似,我想要有一个QML元素将自己传递给JS函数,或者让它在另一个元素上设置属性。这可能吗?
例如:
Rectangle{
id:theParent
property var theElement
SomeElement{
id:theChild
MouseArea {
anchors.fill:parent
onClicked: {
someJsFunction(*whatGoesHere*)
parent.theElement=*whatGoesHere*
}
}
或者,考虑一下:
Rectangle{
id:theParent
property var theElement
SomeElement{
id:theChild
}
然后,在SomeElement.qml:
中Rectangle{
MouseArea {
anchors.fill:parent
onClicked: {
someJsFunction(*whatGoesHere*)
parent.theElement=*whatGoesHere*
}
}
}
在这种情况下,*whatGoesHere*
将是调用它们的SomeElement的实例。
这在QML中是否可行?我认为id
属性是有意义的,但根据文档,您无法查询id
字段的值,无论如何id
如果我的{SomeElement
将不可用{1}}在单独的文件中描述,上面的 whatGoesHere 处理出现在该单独的文件中,而不是在特定的实例中。
答案 0 :(得分:11)
我有两个补充提案:
首先,对于单次使用,传递ID,因为它基本上是指向项目的指针:
MouseArea {
id: myClicker;
onClicked: { callFunc (myClicker); }
}
然后,如果您需要多个项目来共享此行为,这意味着您正在使用MVC,因此ID将完全相同:
Repeater {
model: 100;
delegate: MouseArea {
id: myClicker;
onClicked: { callFunc (myClicker); }
}
}
这是经典部分。
但是如果你创建自己的组件要更好,请记住创建一个“自我”帮助属性来正确执行'this'工作:
MouseArea { // component root definition
id: base;
property var self : base; // bind self on the I
}
然后像这样使用它:
Repeater {
model: 100;
delegate: MyComponent {
onClicked: { callFunc (self); }
}
}
根据需要随时使用!
答案 1 :(得分:0)
SomeElement
的实例是id
属性值,即theChild
。您可以将其用作this
。据我所知,没有其他内置方式存在。但是您可以尝试使用属性添加自己的QML项层次结构,该属性将返回this
。
另一种方法是让一些父母的孩子使用它们。所以你得到孩子,找到你需要的孩子并使用那个特定的实例
答案 2 :(得分:0)
如果您在单独的文件中定义元素,则可以简单地分配id
并使用它。它只在该实例的上下文中有效:
<强> SomeElement.qml 强>
Rectangle{
id: thisElement
MouseArea {
anchors.fill: parent
onClicked: {
someJsFunction(thisElement);
parent.theElement = thisElement;
}
}
}