官方文档关于button组件的简介

xml页面挺容易理解,但js部分起初对整体写的形式都不太理解,随着逐渐阅读代码基本理解了

xml页面代码:

<button type="default" size="{{defaultSize}}" loading="{{loading}}" plain="{{plain}}"
disabled="{{disabled}}" bindtap="default" hover-class="other-button-hover"> default </button>
<button type="primary" size="{{primarySize}}" loading="{{loading}}" plain="{{plain}}"
disabled="{{disabled}}" bindtap="primary"> primary </button>
<button type="warn" size="{{warnSize}}" loading="{{loading}}" plain="{{plain}}"
disabled="{{disabled}}" bindtap="warn"> warn </button>
<button bindtap="setDisabled">点击设置以上按钮disabled属性</button>
<button bindtap="setPlain">点击设置以上按钮plain属性</button>
<button bindtap="setLoading">点击设置以上按钮loading属性</button>
<button open-type="contact">进入客服会话</button>

js代码:

var types = ['default', 'primary', 'warn']
var pageObject = {
data: {
defaultSize: 'default',
primarySize: 'default',
warnSize: 'default',
disabled: false,
plain: false,
loading: false
},
setDisabled: function (e) {
this.setData({
disabled: !this.data.disabled
})
},
setPlain: function (e) {
this.setData({
plain: !this.data.plain
})
},
setLoading: function (e) {
this.setData({
loading: !this.data.loading
})
}
} for (var i = 0; i < types.length; ++i) {
(function (type) {
pageObject[type] = function (e) {
var key = type + 'Size'
var changedData = {}
changedData[key] =
this.data[key] === 'default' ? 'mini' : 'default'
this.setData(changedData)
}
})(types[i])
} Page(pageObject)

起初很懵逼,一般不都是下边这种形式么

Page({
  data:{
},
  onLoad: function (options) {
  }
})

仔细一看后发现  Page(pageObject)  在最下边  pageObject是定义的一个函数,整体和之前没什么区别

但看到function(type)这部分后,有点懵逼,Google也搜不到关于function(type)的解释

for (var i = 0; i < types.length; ++i) {
(function (type) {
pageObject[type] = function (e) {
var key = type + 'Size'
var changedData = {}
changedData[key] =
this.data[key] === 'default' ? 'mini' : 'default'
this.setData(changedData)
}
})(types[i])
}

结合最初定义的数组

var types = ['default', 'primary', 'warn']

我就大胆猜测了一下,type可能是types[i]下当前的值,而

var key = type + 'Size'

是对data中定义的函数进行重组成data中的函数defauSize,primarySize,warnSize,而type[i]又巧妙地用当前的值也就是xml页面中对应的bindTap值进行响应,继而改变button的size的值

最新文章

  1. 微信小程序开发—快速掌握组件及API的方法
  2. 【小白的CFD之旅】13 敲门实例【续3】
  3. SpringMVC中定时器继承Task后无法对service注入问题
  4. 一款很实用的jQuery鼠标悬浮有动画效果的响应式瀑布流插件
  5. (转)无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败的原因是对 IID 为“{00020970-
  6. threadlocal类
  7. hdu 4302 优先队列
  8. CSS兼容性(IE和Firefox)技巧大全
  9. NOI 银河英雄传说
  10. (转)实战Memcached缓存系统(4)Memcached的CAS协议
  11. 浅谈pageobject模式
  12. C#实现仿QQ震动
  13. java 二维码原理以及用java实现的二维码的生成、解码(转)
  14. background-image使用svg如何改变颜色
  15. jQuery validator plugin之概要
  16. python绝对路径的表述方式 及 字符串的转义
  17. php usort
  18. [JAVA]JAVA章1 数组数据去重
  19. 从官网下载指定版本的JDK
  20. js便签笔记(10) - 分享:json.js源码解读笔记

热门文章

  1. jar包要读取的资源文件路径问题
  2. AndroidStudio使用的kotlin简介
  3. Laravel 框架对于分表进行统计合并查询的思路
  4. Checkedlistbox只能单选不能多选
  5. angular cli + primeNG
  6. Chrome是老大,Firefox 是老二,Edge 不是老三
  7. 【好书推荐】《剑指Offer》之硬技能(编程题1~6)
  8. django的使用INNODE的方式,排除错误MySQL Strict Mode is not set for database connection &#39;default&#39;
  9. 微服务与K8S容器云平台架构
  10. Python生成requirements.txt方法