与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字段的值,无论如何,如果我的SomeElement在一个单独的文件中描述,并且上面的whatGoesHere处理,则id将不可用出现在该单独的文件中而不是在特定的实例中.
解决方法
我有两个补充建议:
首先,对于单次使用,传递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); } } }
根据需要随时使用!