Share via


如何建立範本函式 (HTML)

[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]

了解如何建立可為 ListView 產生項目的範本函式。

您必須知道的事

技術

先決條件

指示

步驟 1: 關於範本函式

相對於使用標記定義項目範本,您可以建立可轉譯每個清單項目的函式。轉譯函式需要以下參數:

object renderItem(itemPromise, recycledElement)

  • itemPromiseIItemPromise 是用來轉譯項目資料。使用同步資料來源時,IItemPromise 通常會完成,但是使用非同步資料來源時,它將會在未來的某個時間完成。

  • recycledElement :來自上一個項目的 DOM,可重複使用以顯示新內容。此為選擇性參數。

    如果您使用元素回收:

    • 使用回收的元素做為預留位置之前,清除舊項目的資訊。使用回收時,舊項目有可能包含其上次使用時的舊資料與狀態。重複使用回收的元素之前,請先清除或隱藏狀態。

      例如,如果範本中包含相片且您想要重複使用 img 元素,但尚無新的 URL 時,請將 img 的不透明度設為 0 以將它隱藏起來,因為它可能包含舊資料的相片。有新相片的 URL 時,您就可以更新 img 元素,將它的不透明度變更回 1。

    • 如果項目的 HTML 具有以項目資料為基礎的條件性狀態,務必在回收時將它重設。

    • 回收元素時,請將對 DOM 的結構變更減至最低。如果 recycledElement 不適合重複使用,請忽略它並從頭開始建立新元素,而 recycledElement 將會被記憶體回收。

    警告  ListView 可以變更 recycledElement 的結構,因此在嘗試存取子元素之前,請務必測試它們是否存在。

     

轉譯函式必須傳回:

  • 項目的 DOM 樹狀目錄根元素。

  • 包含這些屬性的物件:

    • element:該項目的 DOM 樹狀目錄的根元素,或是對於完成時將傳回項目根元素的 Promise。
    • renderComplete:在完全轉譯項目時會完成的 Promise

步驟 2: 建立簡單的轉譯函式

本範例會擷取名為 templateFunctionListViewListView,然後使用顯示每個資料項目之 titletext 以及 picture 的項目範本函式,設定它的 itemTemplate 屬性。

    app.onactivated = function (args) {
        if (args.detail.kind === activation.ActivationKind.launch) {
            if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
                // TODO: This application has been newly launched. Initialize
                // your application here.
            } else {
                // TODO: This application has been reactivated from suspension.
                // Restore application state here.
            }
            args.setPromise(WinJS.UI.processAll().then(function () {
                var lView = document.getElementById("templateFunctionListView").winControl;
                lView.itemTemplate = itemTemplateFunction;

            }));

        }
    };

   function itemTemplateFunction(itemPromise) {

       return itemPromise.then(function (item) {
           var div = document.createElement("div");

           var img = document.createElement("img");
           img.src = item.data.picture;
           img.alt = item.data.title;
           div.appendChild(img);

           var childDiv = document.createElement("div");

           var title = document.createElement("h4");
           title.innerText = item.data.title;
           childDiv.appendChild(title);

           var desc = document.createElement("h6");
           desc.innerText = item.data.text;
           childDiv.appendChild(desc);

           div.appendChild(childDiv);
           
           return div;
       });
    };

備註

如需更多範例,請參閱ListView 項目範本範例

相關主題

ListView 項目範本範例