91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

doT的高級用法及loadData的使用

發布時間:2020-07-10 04:51:27 來源:網絡 閱讀:342 作者:羅那爾劉能 欄目:開發技術

本文出自APICloud官方論壇,
感謝論壇版主?gp3098的分享。

之前直接把模板寫在頁面底部的script標簽內的,但是現在不同。?使用了doT.js配合api的loadData方法,整個頁面就是模板。?以前打開frame或者window的時候一直不明白url和data怎么配合,一直以為data只能加載到一些靜態的頁面,沒有其他用法。

學習了doT.js的一些高級用法,能夠更好的搭建多頁面程序。
在打開新頁面的時候先通過dot渲染一個頁面然后通過frame或者win的方法來加載html代碼。

//數據渲染到frame的內容區域//默認只渲染第一頁
function renderData(currid, tag, page, size, sort, order) {

            var currentSort = $api.dom('.screen a.on');

            var param = {
                    id: currid || tag.dataset.id,
                    page: 1,
                    size: 10,
                    sort: sort || currentSort.dataset.sort,
                    order: order || currentSort.dataset.order,
            }
            //從文件讀取兩個模板
            var template = loadfile('widget://mall/components/goodsList_frame.html');
            var template2 = loadfile('widget://mall/components/goodsitem.html');
            // var template = loadfile('widget://mall/components/goods.html');
            var def = {
                    debug: true,
                    content: template2, //第二個模板用于重復使用   在加載更多內容時候使用
                    urlparam: param,
            };
            var tempFn = doT.template(template, undefined, def); //生成渲染模板的函數
            api.cancelAjax({
                    tag: ajaxtag1
            });
            // console.warn(parseUrl(param));//用來解析url,把json的url變成字符串形式
            ajaxtag1 = $api.get(DOMAIN + '/ajax/goodslist?' + parseUrl(param), function(ret, err) {
                    console.warn(JSON.stringify(ret));
                    var html = tempFn(ret);
                    // 要檢查frame的真實內容在html這里!!!
                    // console.warn(html);
                    //通過loadData方式把頁面加載到frame中,通過參數改變,每次重新加載frame內容
                    api.loadData({
                            frameName: 'goods_list',
                            url: 'widget://mall/components/', //要加載的頁面,data內的css、js的路徑的根路徑!!!
                            data: html //dot渲染出來的html頁面  成為frame的內容,生成的frame頁面整個頁面都可以用dot模板語法因為整個頁面就是模板
                    });
            }, 'json');
    }

復制代碼
這里的loadfile是官方的api方法
有同步和異步兩種,都進行封裝過,但感覺封裝得不夠好,只展現一個同步,不然代碼不完整。

function loadfile(url) {
return api.readFile({
sync: true,
path: url || '',
});
}
復制代碼
還有官方的$api.get方法是不會返回tag用來取消ajax請求的

//json轉url參數
var parseUrl = function(urlparam) {
return Object.keys(urlparam).map(function(key) {
return encodeURIComponent(key) + "=" + encodeURIComponent(urlparam[key]);
}).join("&");

}
復制代碼
模板1

var template = loadfile('widget://mall/components/goodsList_frame.html');//對應的模板文件在下面
復制代碼
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="../css/all.css">
<title>商品二級分類 搜索 內容</title>
</head>

<body>
{{#def.header}}
<div class="product_list clearfix content" data-id="{{#def.urlparam.id}}" data-sort="{{#def.urlparam.sort}}" data-order="{{#def.urlparam.order}}" data-page="{{#def.urlparam.page}}" data-size="{{#def.urlparam.size}}">
<!-- 這里的def.content預編譯對應的在上一個頁面的def內, -->
<!-- 而content內的html我也單獨提取出來放到一個頁面內了,方便重復調用 -->
{{#def.content }}
</div>
{{#def.footer}}
<!-- 這里只是說有這樣的用法,但是不代表一定要加header或者footer,因為api框架的原因, -->
<!-- 我會在上一個頁面內加載header也就是window里面,然后自適應高度頭部 -->
<!-- 底部有時候是用tablayout寫,所以也用不到 -->

</body>
<script type="text/javascript" src="../js/doT.min.js"></script>
<script type="text/javascript" src="../js/api.js"> </script>
<script src="../js/main.js"></script>
<script src="../js/goodsList_frame.js" charset="utf-8"></script>
<!-- 加一個script標簽用來放原生js也是可以的,但是為了防止dot模板沖突,建議還是放在文件里通過引用的方式來加載,css也是一樣 -->
</html>

復制代碼
模板 2
{{?it.list && it.list.length>0}}
{{~it.list:value:index}}
<a href="javascript:;" onclick="openTabFrame(this);" data-id="{{=value.goods_id}}" data-userid="{{=value.user_id}}" data-name="{{=value.goods_name}}" data-saled="{{=value.sales_volume}}" data-price1="{{=value.market_price}}" data-price2="{{=value.shop_price}}"
data-thumb="{{=value.goods_thumb}}" data-stock="{{=value.goods_number}}" tapmode>
<img src="{{= DOMAIN + '/'+value.goods_thumb}}" alt="">
<h4>{{=value.goods_name}}</h4>
<h5>已賣出{{=value.sales_volume}}件</h5>
<p>¥{{=value.market_price}}<span>積分20%</span><span>滿50元減5元</span></p>
</a>
{{~}}
{{??}}
{{?}}
復制代碼

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳山县| 台安县| 延安市| 奉贤区| 许昌县| 观塘区| 南江县| 宿松县| 文化| 芮城县| 洛阳市| 田林县| 枞阳县| 云安县| 富平县| 浮山县| 尤溪县| 静宁县| 河曲县| 静安区| 临朐县| 敦煌市| 昌吉市| 盐池县| 宝山区| 万全县| 五台县| 施秉县| 湖南省| 滁州市| 巴马| 通渭县| 大渡口区| 巫山县| 河南省| 康平县| 河北区| 罗田县| 洛浦县| 龙口市| 城步|