微信小程序官方文檔中表單組建button部分有關function(type)中type的個人理解


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM