官方文檔關於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的值
