doT的高级用法及loadData的使用-创新互联

本文出自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');//对应的模板文件在下面
复制代码





商品二级分类 搜索 内容


{{#def.header}}




{{#def.content }}

{{#def.footer}}








复制代码
模板 2
{{?it.list && it.list.length>0}}
{{~it.list:value:index}}
data-thumb="{{=value.goods_thumb}}" data-stock="{{=value.goods_number}}" tapmode>

{{=value.goods_name}}


已卖出{{=value.sales_volume}}件

¥{{=value.market_price}}积分20%满50元减5元



{{~}}
{{??}}
{{?}}
复制代码

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:doT的高级用法及loadData的使用-创新互联
文章地址:http://pwwzsj.com/article/gjhij.html