钉钉E应用是一种全新的开发模式,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS、安卓、等多端部署。轻量级,容易上手,开发快捷。酷似微信小程序,限制比较多。
一、框架
与微信小程序一毛一样。
E应用分为app和page两层。app用来描述整体程序,page用来描述各个页面。
1.1、 app 由三个文件组成,必须放在项目的根目录。
1.2、page 由四个文件组成,分别是:
js 页面逻辑,app.js赋值this.xxx = 'xxx'
。 page.js赋值this.setData({ xxx: 'xxx'}
注意:为了方便开发者,我们规定这四个文件必须具有相同的路径与文件名。
开发者写的所有代码最终将会打包成一份 JavaScript 脚本,在E应用启动的时候运行,在E应用结束运行时销毁。
E应用的核心是一个响应式的数据绑定系统,逻辑上分为视图层和逻辑层。这两层始终保持同步,只要在逻辑层修改数据,视图层就会相应的更新。
注意:由于框架并非运行在浏览器中,所以 JavaScript 在 web 中的一些能力都无法使用,如 document、window等对象。
逻辑层 js 可以用 es2015 模块化语法组织代码:
import util from './util'; // 载入相对路径
import absolute from '/absolute'; // 载入项目根路径文件
E应用支持引入第三方模块,需先在E应用根目录下执行如下命令安装该模块:
npm install lodash
引入后即可在逻辑层中直接使用:
import lodash from 'lodash'; // 载入第三方 npm 模块
注意:由于 node_modules 里第三方模块代码不会经过转换器,为了确保各个终端兼容,node_modules 下的代码需要转成 es5 格式再引用,模块格式推荐使用 es2015 的 import/export。同时,浏览器相关web能力同样无法使用。
二、App
属性 | 类型 | 描述 |
---|---|---|
query | Object | 当前E应用的 query |
path | String | 当前E应用的页面地址 |
注意 query 从启动参数的 query 字段解析而来,path 从启动参数 page 字段解析而来
提供全局的getApp()函数,可以获取到E应用实例,一般用在各个子页面之中获取顶层应用。
var app = getApp()
console.log(app.globalData) // 获取 globalData
注意:
文件 | 类型 | 必填描述 |
---|---|---|
pages | StringArray | 设置页面路径 |
window | Object | 设置默认页面的窗口表现 |
tabBar | Object | 设置底部 tab的 表现(顶部线条颜色,文字size,图片大小不能改,无法添加自定义事件) |
数据绑定使用 Mustache 语法(双大括号)将变量包起来,可以作用于各种场合。
4.1、数据绑定
{{message}}
// page.js
Page({
data: {
message: 'Hello dingtalk!'
}
})
4.2、列表渲染
默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item。
使用a:for-item可以指定数组当前元素的变量名。
使用a:for-index可以指定数组当前下标的变量名。
{{index}}: {{item.message}} {{idx}}: {{itemName.message}}4.3、引用
axml提供两种文件引用方式import和include
(1)import有作用域的概念,只会import目标文件中定义的template。
(2)include可以将目标文件除了的整个代码引入,相当于是拷贝到include位置
4.4、模板
axml提供模板(template),可以在模板中定义代码片段,在不同的地方调用。此处 template 区别于 slot
(1)定义模板,使用name属性,作为模板的名字,然后在内定义代码片段。
(2)使用模板,使用is属性,声明需要的使用的模板,然后将该模板所需要的data传入,is属性可以使用Mustache语法,来动态决定具体需要渲染哪个模板
注意:模板拥有自己的作用域,只能用data传入的数据,但可以通过onXX绑定页面的逻辑处理函数
4.5、自定义组件
(1)和页面一样,自定义组件也由4个部分组成:axml、js、json、acss。
(2)开发者需要在 json 中设置 “component”: true,表示这是一个自定义组件
// /components/customer/index.js
Component({
mixins: [], // mixin 方便复用代码
data: { x: 1 }, // 组件内部数据
props: { y: 1 }, // 可给外部传入的属性添加默认值
didMount(){}, // 生命周期函数
didUpdate(){},
didUnmount(){},
methods: { // 自定义事件
handleTap() {
this.setData({ x: this.data.x + 1}); // 可使用 setData 改变内部属性
},
},
})
和vue.js有些相似
开发者需要使用Component函数,注册自定义组件。
on
为前缀,否则会将其处理为字符串4.6、事件
(1)常用点击事件,onTap
(2)传参方式: data-参数名=“xxx”,多个,data-参数1, data-参数2……
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
4.7、样式
(1)rpx(responsive pixel)可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。
(2)内联样式style、class
style属性:静态的样式统一写到class中。style接收动态的样式,样式在运行时会进行解析,请尽量避免将静态的样式写进style中,以免影响渲染速度。
class属性:用于指定样式规则,属性值是样式规则中类选择器名(样式类名)的集合,样式类名不需要带上.,之间用空格分隔。
二、JSAPI
(1)dd.alert 弹窗,和常用的UI框架差不多,就是没有图标
(2)dd.showToast 弱提示,和常用的UI框架差不多,就是没有图标。
注意: showToast在ios系统,延迟时间不起作用,既无论设延迟多少秒,都会一 闪而过
dd.datePicker(object)
打开日期选择列表, 很难改变其原样式
注:dd.navigateTo 和 dd.redirectTo 不允许跳转到 tabbar 页面;如果需要跳转到 tabbar 页面,请使用 dd.switchTab,并且初始化数据方法放在 onShow钩子里,否则页面不会获取最新的数据,进行页面刷新。
三、组件
(1) 一定要给数值添加最小值属性 min: 0 ,才能生成范围网
ddChart.source(data, {
'number': {
min: 0 // 定要设置最小值,才能生成范围网
}
});
(2) 图表形状类型,雷达图 type:‘polygon’
ddChart.axis('number', {
label: null,
grid: {
lineDash: null,
type: 'polygon' // 图表形状类型
}
})
(3)设置标题字体大小fontSize: ‘14’
ddChart.axis('titleName', {
label: { fontSize: '14' /* 文本大小 */ }
});
(4) 设置雷达链线条大小 size(1),颜色color("#6BA2FF")
ddChart.line().position('titleName*number').color("#6BA2FF").size(1);
Picker
组件注意: picker
内只能有一个容器,否则会有奇奇怪怪的问题,又没有报错信息。
有时候出现页面一片,控制台没有任何报错信息
ObjectArray
当前选择:{{objectArray[arrIndex].name}}
scroll-top
Number 竖向滚动条位置audio
在开发文档中没有,因为和微信小程序
差不多的,所以很多组件,可以借鉴着用的哦!问题:
初始化了,就调用play
方法,但音频并没有播放成功。打印看也没有paly
方法的,为什么呢??解题:
因为打印出来又没有play
方法,尝试了可以播放,相信是有这个方法的。尝试通过点击按钮,调用play
方法,竟然可以成功播放啊!!!个人猜想,刚初始化,就调用paly
,可能是还没初始化完成导致注意:
最好用demo中的this.audioCtx
保存,因为其他的作用域,有时候会拿不到showToast 有几个情况,比如钉钉版本不同,有页面跳转的时候,手机系统不同等会有问题
钉钉版本太低,执行了该代码,但是页面没有弹出提示消息,而回调方法里,赋值当前上下文的全局变量,有时赋值失败,有时赋值成功了,但是页面显示的值没变
解决: 用const声明值,再赋值
奇葩效果: ios上,程序写的是,弹出提示消息,再进行页面跳转。但实际上是,直接页面跳转了,没弹出提示消息。
解决: 当为ios设备时,延时加载回调
因本人做的项目不需要使用完框架所有的内容,还在接触中,边使用边记录,到此先暂告一小段落_……