首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES6、PreloadJS和作用域

ES6、PreloadJS和作用域
EN

Stack Overflow用户
提问于 2016-12-30 21:15:18
回答 1查看 217关注 0票数 0

在PreloadJS的回调函数中,我失去了作用域。我尝试过不同的方法,如箭头函数(在最高级别上无效)。有什么建议吗?(对于错误的代码块(类定义等)很抱歉,还在适应这个编辑器,相信我,一切都是正常的代码)……

代码语言:javascript
复制
import Navigation from './Navigation'
import ajax from "./Ajax";
import Helper from "./Helper";

let preload = null;

export default class Page{  

    constructor(){
        this.preload = new createjs.LoadQueue();
        this.preload.addEventListener("fileprogress", this.handleFileProgress);
        this.preload.addEventListener("fileload", this.handleFileComplete);

    }



    initPage(_arg = []){        
        this.buildPage(this.thePage);
    }


    buildPage(_content){
        this.loadImage(item.featured_image_thumbnail_url);

    }

    handleFileComplete(event){      

        console.log(event);
        console.log(this); // undefined

        let el = document.getElementById('heroImage');
        let loader = el.getElementsByClassName('loader')[0];
        this.showPage(); // cannot read property showPage of undefined

    }

    // small arrow test, doesn't seem valid
    //handleFileComplete = (event) =>{
    //    this.showPage();
    //}

    handleFileProgress(event){      
        let hero = document.getElementById('heroImage')
        let loader = hero.getElementsByClassName('loader')[0];
    }

    loadImage(_img){      

        let el = document.getElementById('heroImage');
        let loader = el.getElementsByClassName('loader')[0];

        let loadManifest = [
          {
            id:   'pat',
            src:  _img,
            scope: this
          }];     

        this.preload.loadManifest(loadManifest, true);  
    }

    showPage(){
        //Helper.removeClass(document.getElementById('mytest','hidden'));
    }       

}
EN

回答 1

Stack Overflow用户

发布于 2016-12-30 21:27:10

好的,5分钟后更新。

将箭头函数作为变量添加,并将其传递给事件侦听器。这不是我喜欢的方式,但它确实有效。

代码语言:javascript
复制
constructor(){

    let handleFileCompleted = (event) => {
        this.showPage(event)
    }       

    this.preload = new createjs.LoadQueue();
    this.preload.addEventListener("fileprogress", this.handleFileProgress);
    this.preload.addEventListener("fileload", handleFileCompleted);
}

showPage(event){
   console.log('I'm now reachable!');
   console.log(event); // fileload event
}

也许这对任何人都有帮助。

但还是有兴趣看看有没有更好的方法...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41396885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档