小程序中的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],
    })
  }
})
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值