Eu acredito que o problema imediato é que o contexto muda dentro das definições de função dentro de Action
. O objeto this
dentro de Action.handleClick()
é Action.handleClick
, não Action
.
Mas vamos voltar um pouco: por que você está usando o paradigma de função dentro de uma função aqui? Isso é comum no Javascript do navegador, já que não há namespace nesse ambiente. Para evitar atropelar outras funções, você falsifica um namespace criando um objeto para manter todas as suas funções.
No entanto, o QML faz o namespace. Observe que você precisou referenciar Action
as ActionJS.Action
do arquivo QML. Portanto, não há necessidade de implementar outro namespace para suas funções; basta colocá-los no nível superior do arquivo JS:
function handleClick() {
console.log("handleClick");
process();
}
function process() {
console.log("processing...");
}
Em seguida, no seu arquivo QML, faça
Component.onCompleted: {
clickMeButton.clicked.connect(ActionJS.handleClick)
}
Ou apenas
onClicked: ActionJS.handleClick()
Estou assumindo aqui que você realmente não precisa de um objeto Action
para nada além de namespacing. Se fizer isso, você deve conhecer o protótipo . Você também pode querer saber sobre .pragma library
, se você pretende usar este arquivo JS em vários arquivos QML.