小程式中的ES6 Class
阿新 • • 發佈:2019-01-06
movie-detail.js原始寫法
var app = getApp();//引用
var util = require('../../../utils/utils.js')//引用資料請求的公共函式
Page({
//初始化資料
data:{
movie:{}
},//es6方式 module,class,promise,=>
onLoad:function(options){
var movieId = options.id;
var url = app.globalData.doubanBase+ "/v2/movie/subject/"+movieId;
util.http(url,this .processDoubanData,"GET","json");
},
//資料處理函式
processDoubanData:function(data){
//對資料來源判空
if(!data){
return;
}
//定義一個空的js物件(導演director)為什麼單獨處理director,因為資料這個地方總是為空,其他資料有地方為空時,也要做相應處理
var director = {
avatar:"",
name:"",
id:""
}
//資料容錯
if(data.directors[0 ] !=null){
if(data.directors[0].avatars !=null){
director.avatar = data.directors[0].avatars.large
}
director.name = data.directors[0].name;
director.id = data.directors[0].id;
}
var movie = {
movieImg :data.images ? data.images.large:"",
country:data.countries[0 ],
title:data.title,
originalTitle:data.original_title,
wishCount:data.wish_count,
commentCount:data.comments_count,
year:data.year,
generes:data.genres.join("、"),
stars:util.convertToStarsArray(data.rating.stars),
score:data.rating.average,
director:director,
casts:util.convertToCastString(data.casts),
castsInfo:util.convertToCastInfos(data.casts),
summary:data.summary
}
//資料繫結
this.setData({
movie:movie
})
},
// 檢視圖片
viewMoviePostImg:function(event){
var src =event.currentTarget.dataset.src;
wx.previewImage({
current: src, // 當前顯示圖片的連結,不填則預設為 urls 的第一張
urls: [src],
success: function(res){
// success
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
}
})
Es6寫法,新建Movie.js類
var util = require('../../../../utils/utils.js');
// 建立Movie物件
class Movie {
//建構函式
constructor(url) {
this.url = url;
}
//定義兩個成員變數getMovieData,processDoubanData
getMovieData(cb) {
this.cb = cb;
util.http(this.url, this.processDouban.bind(this));
}
processDoubanData(data) {
if (!data) {
return;
}
var director = {
avatar: "",
name: "",
id: ""
}
//資料容錯
if (data.directors[0] != null) {
if (data.directors[0].avatars != null) {
director.avatar = data.directors[0].avatars.large
}
director.name = data.directors[0].name;
director.id = data.directors[0].id;
}
var movie = {
movieImg: data.images ? data.images.large : "",
country: data.countries[0],
title: data.title,
originalTitle: data.original_title,
wishCount: data.wish_count,
commentCount: data.comments_count,
year: data.year,
generes: data.genres.join("、"),
stars: util.convertToStarsArray(data.rating.stars),
score: data.rating.average,
director: director,
casts: util.convertToCastString(data.casts),
castsInfo: util.convertToCastInfos(data.casts),
summary: data.summary
}
this.cb(movie);
}
}
//class物件是個模組,使用export把物件輸出出去
export{Movie}
movie-detail.js更改之後的程式碼
import {Movie} from 'class/Movie.js' //引入類
var app = getApp();//引用
Page({
//初始化資料
data:{
movie:{}
},//es6方式 module,class,promise,=>
onLoad:function(options){
var movieId = options.id;
var url = app.globalData.doubanBase+ "/v2/movie/subject/"+movieId;
var movie = new Movie(url);
//class類Movie的方法getMovieData,接收一個回撥函式,因為回撥裡面有http請求是非同步的,所以要用這種方法
//假如回撥是同步的,可以使用下面的方法直接取值
// var movieData= movie.getMovieData();
//function(movie)中的movie是getMovieData方法內處理過返回的movie
var that =this;
movie.getMovieData(function(movie){
that.setData({
movie:movie
})
})
},
// 檢視圖片
viewMoviePostImg:function(event){
var src =event.currentTarget.dataset.src;
wx.previewImage({
current: src, // 當前顯示圖片的連結,不填則預設為 urls 的第一張
urls: [src],
})
}
})