1. 程式人生 > >小程式中的ES6 Class

小程式中的ES6 Class

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],
    })
  }
})