注冊過小程序之后,接下來注冊頁面。
代碼說明
//index.js
//獲取應用實例
var app = getApp()
Page({
??? data: {
??????? motto: 'Hello World',
??????? userInfo: {}
??? },
??
??? //事件處理函數(shù)
??? bindViewTap: function() {
??????? wx.navigateTo({
???????????? url: '../logs/logs'
??????? })
??? },
???
??? onLoad: function () {
??????? console.log('onLoad')
??????? var that = this
??????? //調(diào)用應用實例的方法獲取全局數(shù)據(jù)
??????? app.getUserInfo(function(userInfo){
??????????? //更新數(shù)據(jù)
??????????? that.setData({
??????????????? userInfo:userInfo
??????????? })
??? ? ? })
???? }
})
Page函數(shù)
Page()
?函數(shù)接受一個
object 參數(shù),用來注冊一個頁面。它可以指定頁面的初始數(shù)據(jù)、生命周期函數(shù)、事件處理函數(shù)等。
初始化數(shù)據(jù)
data屬性指定的數(shù)據(jù)在頁面第一次描畫時使用。本例中定義了兩個數(shù)據(jù):motto和userinfo。
事件處理
bindViewTap函數(shù)是在index.wxml中綁定到用戶信息表示容器上的。每當用戶點擊該容器,這個函數(shù)就會被調(diào)用。它的內(nèi)容很簡單,就是遷移到log畫面。
生命周期函數(shù)
本例中注冊了onLoad函數(shù),它會在頁面加載時自動調(diào)用。
onLoad函數(shù)以函數(shù)對象為參數(shù)調(diào)用app.getUserInfo函數(shù)。而這個函數(shù)對象以userinfo為參數(shù),功能是將userinfo設(shè)置到頁面數(shù)據(jù)的userinfo對象上。
JavaScript知識
在調(diào)用app.getUserInfo傳遞了一個匿名的函數(shù)對象。這個對象至少有兩點是C程序員不習慣的。
this和that
代 碼中首先定義了一個that變量并將this賦值給它,然后使用that調(diào)用setData函數(shù)。這么做是因為javascript的this指針指向的 是調(diào)用函數(shù)的上下文。而這個函數(shù)在app.getUserInfo中調(diào)用,所以不能直接使用this,而只能使用事先準備好,指向本頁面對象的that。
函數(shù)對象
在app.js中,作為參數(shù)傳遞給getUserInfo的函數(shù)對象cb是這樣被調(diào)用的:
typeof cb == "function" && cb(this.globalData.userInfo)
我們可 以用&&符號將表達式分為兩部分,左邊是取得cb的類型,確認是否是"function”,如果是則繼續(xù)執(zhí)行右半部分,以 this.globalData.userInfo為參數(shù)調(diào)用cb函數(shù);如果cb的類型不是"function",因為表達式已經(jīng)為假,所以不會調(diào)用cb 函數(shù)。
換一種寫法,其實就是:
if(typeof cb == "function")
{
????cb(this.globalData.userInfo)
}
參考資料
關(guān)于this對象