APICloud项目纪要
一.页面之间的传递参数
通过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项目纪要的更多相关文章
- Django项目纪要
开发流程 公司高层 项目立项 | 市场部门 需求分析-->需求分析说明书, 需求规格说明书 | 产品部门 产品原型-->产品 UI 前端 后端 测试 移动端 | |------------ ...
- 【APICloud】利用sublimetext3编写apicloud
下载sublime text 3 安装插件 使用模糊搜索apicloud有三个插件全部下载下来 安装海马玩模拟器,这是一个安卓的模拟器,进入官网下载后直接安装就可以了. 打开sublime text ...
- 【APICloud】APICloud基础学习与快速入门
前言:回顾这几天学习情况,总的来说APICloud官网它的学习资料和社区还是足够了,但是我必须吐槽一句,实在是过于混乱了,视频资料文档资料它一股脑地都堆在了那里,这几天基本处于在各个地方跳转,然后现在 ...
- apicloud教程2 (转载)
本帖最后由 中山赢友网络科技有限公司 于 2015-10-17 15:38 编辑 继<APICloud之小白图解教程系列(一):认识APICloud>之后的第二篇教程. 本篇教程有以下知识 ...
- 关于ApiCloud的Superwebview在androidstudio中集成微信支付模块,提示模块未绑定的问题
前两天ApiCloud项目集成了微信支付模块,android端今天也将ApiCloud官方的uzWxPay.jar集成了.在编译玩测试的时候提示wxPay模块为绑定!我的项目是使用ApiCloud推出 ...
- ApiCloud开发的注意事项
1. 引擎或模块问题:遇到应用层无法解决的问题,如果能确定需要引擎和模块支持的,不要自己想办法绕过去,要第一时间在开发者社区提交问题,或找APICloud项目经理提出. !!!注意!!!: 在开发者社 ...
- ApiCloud开发经验总结
1. 引擎或模块问题:遇到应用层无法解决的问题,如果能确定需要引擎和模块支持的,不要自己想办法绕过去,要第一时间在开发者社区提交问题,或找APICloud项目经理提出. !!!注意!!!: 在开发者社 ...
- APICloud APP前端框架——手机APP开发、APP制作、APP定制平台
概述 APICloud前端框架,包括api.js和api.css.api.css处理不同平台浏览器的默认样式.api.js是一个JavaScript库.是APICloud为混合移动开发定制的轻量Jav ...
- 如何开发出优秀的APICloud应用
APICloud定制平台项目实施规范 APICloud应用优化策略Top30 如何开发出运行体验良好.高性能的App 如何开发出客户满意.能够顺利交付的App 1. 引擎或模块问题: 遇到应用层无法解 ...
随机推荐
- SHELL脚本和常用命令
什么是脚本? 脚本简单地说就是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的(如可以用记事本打开查看.编辑). 常见的脚本: JavaScript(JS,前端),VBScript, AS ...
- 文件上传-pubsec-文件上传大小限制
文件上传-pubsec-文件上传大小限制 Caused by: java.lang.IllegalArgumentException: ContextPath must start with '/' ...
- Redis笔记2-Redis安装、配置
下载安装包 wget http://download.redis.io/releases/redis-4.0.8.tar.gz解压 tar xzvf redis-4.0.8.tar.gz安装 cd r ...
- flink源码学习
传送门: https://www.jianshu.com/c/c9b356caf8a6
- 交换机端口与Mac地址绑定(基于Cisco模拟器)
实验设备: 二层交换机一台,主机三台 实验步骤: 1.进入相应的接口 (以端口1设置Mac地址绑定,PC0接1端口举例) Switch>enable Switch#config Configur ...
- [LeetCode] 90. Subsets II 子集合之二
Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...
- wifidog 用户第一次访问网络流程图
通过wifidog实现用户上网强制认证后,用户第一次访问网络的流程大致如下: 1.用户通过浏览器访问某一网页. 2.wifidog重定向用户请求到认证服务器. 3.认证服务器返回登录认证页面给用户. ...
- Nodejs操作MySQL数据库
https://github.com/mysqljs/mysql 如何用nodejs操作MySql数据呢,其实写法还是简单的, 1.开始在你的node项目中 npm install mysql - ...
- 解决SpringDataJpa实体类中属性顺序与数据库中生成字段顺序不一致的问题
一.在application.yml配置中添加数据库根据实体类自动创建数据库表的配置(这里数据库采用MySQL数据库) jpa: database: MYSQL show-sql: true #Hib ...
- golang语言特性
1. 垃圾回收 a. 内存⾃动回收,再也不需要开发⼈员管理内存 b. 开发人员专注业务实现,降低了心智负担 c. 只需要new分配内存,不需要释放 2. 天然并发 a. 从语⾔层面⽀持并发,⾮常简 ...