一.页面之间的传递参数
通过pageParam传递参数:

 api.openWin({
name: 'ware',
url: './ware.html',
pageParam: {
wareId: 'w123'
}
});

在打开的窗口使用 api.pageParam 接收数据
  api.pageParam.wareId

二.窗口之间的通信机制:
1.跨窗口调用函数,类似于vue的子传父
定义函数(携带数据)

 api.execScript({
name: 'login', //窗口name
frameName: 'login_frame', //窗口下的framename
script: 'fnSetUserName(\"' + usernameValue +'\");'
});

另一个窗口监听函数得到数据
  function fnSetUserName(data) { console.log(data) //传过来的数据 }

2.自定义全局事件

 api.sendEvent({
name: 'cityChange', //事件名
extra: {currentCity: cityList[index]} // 数据的 key 和 value
});

其他页面监听事件得到数据

 api.addEventListener({
name: 'cityChange' //监听的事件名
}, function (ret, err) {
if (ret) {
if (ret.value) {
// 得到数据
currentCityId = ret.value.currentCity.id;
}
}
});

三.dot模板引擎使用方法
1.script 标签定义一个模板

 <script type="text/template" id="template">
{{~it:value:index}} //~it 默认处理方式为数组
{{?0 == value.showType}} // if 条件编译
<div class="content" tapmode onclick="fnOpenWareWin('{{=value.id}}');"></div> //通过 花括号= 的方式插值
{{??}} //相当于else
<div class="content" tapmode onclick="fnOpenWareWin('{{=value.id}}');"></div>
{{?}}
{{~}} // 结束标签 ~
</script>

特别注意点:如果模板中有点击事件,那么需要调用 api.parseTapmode(); 方法
由于是动态的将元素添加到Dom树上,所以需要手动触发tapmode检查,列表中的元素才能实现点击加速的效果

2.模板数据进行渲染

 function fnUpdata() {
// 获取页面存放数据的位置
var list = $api.byId('list');
// 1. 编译模板函数
var tempFn = doT.template($api.byId('template').innerHTML);
// 2. 多次使用模板函数
var resultText = tempFn(data);
// 由于是动态的将元素添加到Dom树上,所以需要手动触发tapmode检查,列表中的元素才能实现点击加速的效果
api.parseTapmode();
}

四.图片缓存

在有用到图片的地方可以执行一个onload方法,下面代码写在方法中

 api.imageCache({
url: wareTypeList[api.pageParam.wareTypeIndex].banner.url
}, function (ret, err) {
if (ret && ret.success) {
banner.src = ret.url;
}
});

五.下拉刷新

下面代码写在  apiready 页面初始化的方法中执行

 api.setRefreshHeaderInfo({
visible: true,
loadingImg: 'widget://image/refresh.png',
bgColor: '#ccc',
textColor: '#fff',
textDown: '下拉刷新...',
textUp: '松开刷新...',
showTime: true,
}, function(ret, err){
fnGetWareList() //重新请求数据的方法
//从服务器加载数据,完成后调用api.refreshHeaderLoadDone()方法恢复组件到默认状态
});

六.上拉加载

此方法写在 api.addEventListener 事件监听函数中

 function initEventListenter() {
// 上拉加载
api.addEventListener({
name: 'scrolltobottom',
extra: {
threshold: 300 //设置距离底部多少距离时触发,默认值为0,数字类型
}
}, function (ret, err) {
fnGetWareList(true) //重新请求数据的方法
});
}
重新请求数据的方法的方法,传递一个参数,用来标识是下拉刷新,还是上拉加载
fnGetWareList(load) {
if(load) {
skip += limit //页数加上条数
} else {
skip = 0 // 设置页数从0请求
}
}

重新请求数据方法成功后调用的更新数据的方法

 // 重新请求数据方法成功后调用的更新数据的方法
function fnUpdateWareList(data_, load) { // 获取要显示在页面的区域
var list = $api.byId('list'); // 编译模板函数
var tempFn = doT.template($api.byId('template').innerHTML); // 使用模板函数生成HTML文本
var resultHTML = tempFn(data_); // 判断是否是加载更多,如果是加载更多,则追加到list中
if (load) {
$api.append(list, resultHTML);
// 如果服务器端已经没有更多数据返回,更新提示信息
if (data_.length < LIMIT) {
var pushStatus = $api.byId('pushStatus');
pushStatus.innerHTML = "没有啦!";
}
} else {
// 否则,直接替换list中的内容
$api.html(list, resultHTML);
} // 由于是动态的将元素添加到Dom树上,所以需要手动触发tapmode检查,列表中的元素才能实现点击加速的效果
api.parseTapmode();
}

APICloud项目纪要的更多相关文章

  1. Django项目纪要

    开发流程 公司高层 项目立项 | 市场部门 需求分析-->需求分析说明书, 需求规格说明书 | 产品部门 产品原型-->产品 UI 前端 后端 测试 移动端 | |------------ ...

  2. 【APICloud】利用sublimetext3编写apicloud

    下载sublime text 3 安装插件 使用模糊搜索apicloud有三个插件全部下载下来 安装海马玩模拟器,这是一个安卓的模拟器,进入官网下载后直接安装就可以了. 打开sublime text ...

  3. 【APICloud】APICloud基础学习与快速入门

    前言:回顾这几天学习情况,总的来说APICloud官网它的学习资料和社区还是足够了,但是我必须吐槽一句,实在是过于混乱了,视频资料文档资料它一股脑地都堆在了那里,这几天基本处于在各个地方跳转,然后现在 ...

  4. apicloud教程2 (转载)

    本帖最后由 中山赢友网络科技有限公司 于 2015-10-17 15:38 编辑 继<APICloud之小白图解教程系列(一):认识APICloud>之后的第二篇教程. 本篇教程有以下知识 ...

  5. 关于ApiCloud的Superwebview在androidstudio中集成微信支付模块,提示模块未绑定的问题

    前两天ApiCloud项目集成了微信支付模块,android端今天也将ApiCloud官方的uzWxPay.jar集成了.在编译玩测试的时候提示wxPay模块为绑定!我的项目是使用ApiCloud推出 ...

  6. ApiCloud开发的注意事项

    1. 引擎或模块问题:遇到应用层无法解决的问题,如果能确定需要引擎和模块支持的,不要自己想办法绕过去,要第一时间在开发者社区提交问题,或找APICloud项目经理提出. !!!注意!!!: 在开发者社 ...

  7. ApiCloud开发经验总结

    1. 引擎或模块问题:遇到应用层无法解决的问题,如果能确定需要引擎和模块支持的,不要自己想办法绕过去,要第一时间在开发者社区提交问题,或找APICloud项目经理提出. !!!注意!!!: 在开发者社 ...

  8. APICloud APP前端框架——手机APP开发、APP制作、APP定制平台

    概述 APICloud前端框架,包括api.js和api.css.api.css处理不同平台浏览器的默认样式.api.js是一个JavaScript库.是APICloud为混合移动开发定制的轻量Jav ...

  9. 如何开发出优秀的APICloud应用

    APICloud定制平台项目实施规范 APICloud应用优化策略Top30 如何开发出运行体验良好.高性能的App 如何开发出客户满意.能够顺利交付的App 1. 引擎或模块问题: 遇到应用层无法解 ...

随机推荐

  1. Springboot jackSon -序列化-详解

    在项目中有事需要对值为NULL的对象中Field不做序列化输入配置方式如下: [配置类型]: 源码包中的枚举类: public static enum Include { ALWAYS, NON_NU ...

  2. DNS分离解析

    实验环境: 一台内网(client)1块网卡:一台网关(dns)2块网卡:一台外网1块网卡 DNS服务器开启路由转发 [root@localhost ~]# vi /etc/sysctl.conf n ...

  3. web-天下武功唯快不破

    没有武术是不可摧毁的,而最快的速度是获得长期成功的唯一途径.>>>>>> ----你必须尽可能快地做到这一点!---- <<<<<&l ...

  4. jmeter引用jar包的3种方式

    示例 实现对登录密码进行MD5加密 pom文件依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --& ...

  5. k8s集群搭建 2019

    参考,https://github.com/qxl1231/2019-k8s-centos 事实上k8s集群的搭建很简单,笔者在搭建的过程中遇到的主要问题是镜像无法下载的问题. 如果发现教程中提供的镜 ...

  6. Django之创建项目、目录层级、基本操作

    创建项目 在合适的位置创建一个目录 打开cmd窗口,进入到创建的目录内 输入django-admin startproject project 目录层级 manage.py 是一个命令行工具,可以使我 ...

  7. C++——二维vector初始化大小方法

    初始化二维vector,为r*c的vector,所有值为0.1.直接用初始化方法(刚开始没想到) vector<vector<int> > newOne(r, vector&l ...

  8. Gym101002E:K-Inversions

    \(Gym101002E:K-Inversions\) 题意描述: 题目连接链接 给定一个长度为\(N\)只包含\(AB\)的字符串,某个\(A\)的位置为\(j\),某个\(B\)的位置为\(i\) ...

  9. [LeetCode] 878. Nth Magical Number 第N个神奇数字

    A positive integer is magical if it is divisible by either A or B. Return the N-th magical number.  ...

  10. 3,[VS] 编程时的有必要掌握的小技巧_______________________________请从下面第 1 篇看起

    本文导览: 善用“并排显示窗口”功能 做作业/测试时使用 多项目 多个源文件 多个子函数 使用Visual Studio team代码同步工具,及时把项目文件保存到云端 关闭括号分号自动联想 技巧是提 ...