Как передать "это" из элемента QML в функцию JS
аналогично this
ключевое слово в C++ я хотел бы либо иметь элемент 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
}
затем, в некотором элементе.в QML:
Rectangle{
MouseArea {
anchors.fill:parent
onClicked: {
someJsFunction(*whatGoesHere*)
parent.theElement=*whatGoesHere*
}
}
}
в этом случае *whatGoesHere*
будет экземпляром SomeElement, из которого они вызываются.
возможно ли это в В QML? Я бы подумал id
свойство имело бы смысл, но, согласно документам, вы не можете запросить значение id
поле, и в любом случае id
не будет доступен, если мой SomeElement
был описан в отдельном файле, а whatGoesHere работа над появилась в отдельном файле, а не в конкретном случае.
3 ответов
у меня есть два дополнительных предложения :
во-первых, для одного использования передайте идентификатор, поскольку это в основном указатель на элемент:
MouseArea {
id: myClicker;
onClicked: { callFunc (myClicker); }
}
тогда, если вам нужно несколько элементов для совместного использования этого поведения, это означает, что вы используете MVC, поэтому ID будет работать точно так же:
Repeater {
model: 100;
delegate: MouseArea {
id: myClicker;
onClicked: { callFunc (myClicker); }
}
}
это классическая часть.
но для todo еще лучше, если вы создаете свои собственные компоненты, имейте в виду, чтобы создать свойство "self" helper, которое выполняет " эту " работу правильно :
MouseArea { // component root definition
id: base;
property var self : base; // bind self on the I
}
тогда используйте его так:
Repeater {
model: 100;
delegate: MyComponent {
onClicked: { callFunc (self); }
}
}
использовать это так часто, как вы хотите !
экземпляр SomeElement
является его id
значение свойства, т. е. theChild
. Вы можете использовать его как this
. Насколько я могу судить, другого встроенного способа не существует. Но вы можете попытаться добавить свою собственную иерархию элементов QML со свойством, которое вернет this
.
другой способ-получить детей от какого-то родителя и использовать их. Таким образом, вы получаете детей, найдите ребенка, который вам нужен, и используйте этот конкретный экземпляр
Если вы определяете свой элемент в отдельном файле, то вы можете просто назначить id
и использовать его. Он будет действителен только в контексте этого экземпляра:
SomeElement.в QML
Rectangle{
id: thisElement
MouseArea {
anchors.fill: parent
onClicked: {
someJsFunction(thisElement);
parent.theElement = thisElement;
}
}
}