2012-08-06 65 views
1

我想這樣做: 顯示某種形式,處理Rectangle :: onClicked事件(禁用表單,將不透明度設置爲0.2,處理一些JavaScript以提交表單,然後將不透明度設置回1.0,啓用形成)。 但我不知道該怎麼做。在QML中提交表單

似乎onClicked()在「批處理」模式下處理,更改任何ui屬性都不可見,直到函數退出。我玩過狀態,過渡和動畫,但仍然沒有成功。

感謝您的任何建議, 米哈爾

回答

0

也許你在談論使用XMLHttpRequest異步。在發送請求時「禁用」表格,當onreadystatechangereadyState === XMLHttpRequest.DONE調用時「啓用」。

+0

不,我的問題集中在更改QML中的UI元素(啓用/禁用)。在我的代碼中,「提交」是通過調用python函數完成的(通過上下文屬性) – Miso 2012-08-07 07:21:53

1

應該可以用狀態來解決。您可以嘗試在WorkerScript中執行Javascript處理。處理完成後,它將發送回覆到QML WorkerScript元素,該元素將表單的狀態設置爲再次啓用。因此,在onClicked中,通過設置狀態來執行禁用動畫,並且在WorkerScript元素的onMessage函數中,通過將狀態設置爲「啓用」來執行啓用動畫。

+0

這個解決方案看起來很好,除了腳本函數無法訪問上下文。有什麼辦法,如何將任何對象傳遞給函數?有一個「網絡」變量是python對象(通過上下文屬性)。我試圖通過這種方式:saveScript.sendMessage({'網絡':網絡}),但它不適合我。當我在函數內調用message.network.save()時,我得到異常:TypeError:表達式的結果'message.network'[null]不是一個對象。 – Miso 2012-08-07 09:06:22

+0

根據限制部分,我無法使用它,因爲我需要通過QDeclarativeContex訪問「在QML對象上設置的上下文屬性」 – Miso 2012-08-07 09:15:58

+1

在此處討論了類似的內容:http://www.developer.nokia.com/Community/Discussion /showthread.php?228097-How-is-the-context-of-WorkerScript-defined – Miso 2012-08-07 09:21:28

2

您可以簡單地啓動兩個自定義動畫,一個隱藏表單和一個顯示。事情是這樣的:

SequentialAnimation { 
    id: submitAndHideForm 

    ParallelAnimation { 
    // Animations to hide the form elements 
    } 
    ScriptAction { 
    script: submitForm() 
    } 
} 

ParallelAnimation { 
    id: showForm 

    // Animations to show the form elements 
} 

然後你可以只當你想提交表單開始第一個與submitAndHideForm.start(),當你得到迴應就可以啓動第二個。