异步加载json作为对象属性,然后在事件中访问它

时间:2014-03-14 22:34:02

标签: javascript jquery asynchronous javascript-events

我有一个对象,我在初始化期间加载了一些json。我还有一个选择,我附加一个onChange事件。 onChange事件函数必须与对象本身一起使用。但那个对象是陈旧的。如何使用实时或更新的对象?

var MyFancyObject = {
    init: function() {
        // set controls
        this.abc = // load some stuff async
        this.select.on('change', this.myEvent.call(this)); // attach my event 
    },

    myEvent: function() {
        console.log(this.abc); // undefined
    }
};

2 个答案:

答案 0 :(得分:1)

this.myEvent.call(this)调用该函数。相反,你想要绑定函数:

    this.select.on('change', this.myEvent.bind(this)); 

答案 1 :(得分:1)

您的事件处理程序未正确设置。它会立即调用,而不是设置为在事件发生时调用。您可以将其更改为:

var MyFancyObject = {
    init: function() {
        // set controls
        this.abc = // load some stuff async
        var self = this;
        this.select.on('change', function(e) {
            self.myEvent(e);
        }); // attach my event 
    },

    myEvent: function() {
        console.log(this.abc); // undefined
    }
};

或者,在现代浏览器(IE9或更高版本)中,您可以使用.bind()

var MyFancyObject = {
    init: function() {
        // set controls
        this.abc = // load some stuff async
        this.select.on('change', this.myEvent.bind(this)); // attach my event 
    },

    myEvent: function() {
        console.log(this.abc); // undefined
    }
};