中文版《Qt5 Cadaques》

模板(Templating)

當使用HTML項目時,通常需要使用模板驅動開發。服務器使用模板機制生成代碼在服務器端對一個HTML根進行擴展。例如一個照片列表的列表頭將使用HTML編碼,動態圖片鏈表將會使用模板機制動態生成。通常這也可以使用QML解決,但是仍然有一些問題。

首先,HTML開發者這樣做的原因是為了克服HTML後端的限制。在HTML中沒有組件模型,動態機制方面不得不使用這些機制或者在客戶端邊使用javascript編程。很多的JS框架產生(jQuery,dojo,backbone,angular,...)可以用來解決這個問題,把更多的邏輯問題放在使用網絡服務連接的客戶端瀏覽器。客戶端使用一個web服務的接口(例如JSON服務,或者XML數據服務)與服務器通信。這也適用于QML。

第二個問題是來自QML的組件緩衝。當QML訪問一個組件時,緩衝渲染樹(render-tree),並且只加載緩衝版本來渲染。磁盤上的修改版本或者遠程的修改在沒有重新啟動客戶端時不會被檢測到。為了克服這個問題,我們需要跟蹤。我們使用URL後綴來加載鏈接(例如http://localhost:8080/main.qml#1234),“#1234”就是後綴標識。HTTP服務器總是為相同的文檔服務,但是QML將使用完整的鏈接來保存這個文檔,包括鏈接標識。每次我們訪問的這個鏈接的標識獲得改變,QML緩衝無法獲得這個信息。這個後綴標識可以是當前時間的毫秒或者一個隨機數。

Loader {
    source: 'http://localhost:8080/main.qml#' + new Date().getTime()
}

總之,模板可以實現,但是不推薦,無法完整發揮QML的長處。一個更好的方法是使用web服務提供JSON或者XML數據服務。