分頁列表框架(三)

天笑發表於2017-02-16

顯示多個列表

本節學習導航欄加多個列表這一常見模式。

[任務]

在示例應用時,訂單列表頁便按照訂單狀態,分成“待服務”和“已完成”兩欄,分別對應一個列表。 我們將練習頁面orders2也改造成支援分欄的樣式。

首先,我們熟悉下後端列表查詢的介面。 筋斗雲後端介面支援業務查詢協議,可以使用cond引數才指定查詢條件:

  • 取待服務訂單:callSvr("Ordr.query", {cond: "status='CR'"});
  • 取已完成/已取消訂單:callSvr("Ordr.query", {cond: "status='RE' or status='CA'"});

我們現在使用的是在mockdata.js中定義的模擬介面,已經模擬了上面兩個呼叫。

我們在頁面中增加導航欄及列表:(page/orders2.html)

<div mui-initfn="initPageOrders2" mui-script="orders2.js">
    <div class="hd">
        ...
        <div class="mui-navbar">
            <a href="javascript:;" mui-linkto="#lst1">待服務</a>
            <a href="javascript:;" mui-linkto="#lst2">已完成</a>
        </div>
    </div>

    <div class="bd">
        <div id="lst1" class="weui_cells weui_cells_access"></div>
        <div id="lst2" class="weui_cells weui_cells_access"></div>
    </div>

    ...
</div>

框架提供導航欄元件,以CSS類"mui-navbar"標識,通過屬性"mui-linkto"分別指向本頁中的兩個列表,點選時可自動切換。 我們把導航欄放在hd中,讓整個bd作為列表容器。這是一種很方便的做法,如果把導航欄放在bd中,還要一個div作為列表容器,且要計算它的合適高度。

初始化列表做些修改,指定新的navRef, listRef,用onGetQueryParam來指定查詢條件:(page/orders2.js)

    var listItf = initPageList(jpage, {
        ...
        navRef: ".mui-navbar",
        listRef: "#lst1,#lst2",
        onGetQueryParam: function (jlst, queryParam) {
            queryParam.ac = "Ordr.query";
            var id = jlst.attr("id");
            if (id == "lst1") {
                queryParam.cond = "status='CR')";
            }
            else if (id == "lst2") {
                queryParam.cond = "status='RE' OR status='CA'";
            }
        },

        ...
    });

相關文章