-2
    <img src="http://www.aero-sa.com/images/ajax-loader.gif" data-bind="visible:loading" />
var model = function() {
    var self = this;
    this.loading =  ko.observable(true);
    setTimeout(function() {
        self.loading(false);
    }, 4000);
}
ko.applyBindings(new model());

我对上面的代码没有什么疑问。this这里的关键字是什么?表示什么?当我编写这样的代码时,图像没有被隐藏....为什么这个关键字不起作用 setTimeout。

var model = function() {
        //var self = this;
        this.loading =  ko.observable(true);
        setTimeout(function() {
            this.loading(false);
        }, 4000);
    }
    ko.applyBindings(new model());

如果可能,请解释。

4

3 回答 3

3

我建议你阅读这个: http: //net.tutsplus.com/tutorials/javascript-ajax/fully-understanding-the-this-keyword/

于 2013-07-12T11:17:23.763 回答
1

第二个this不起作用,因为您更改了this有效的上下文...第二个this仅对setTimeout函数内的属性有效。

这会起作用:

var model = function() {
    var self = this;
    self.loading =  ko.observable(true);
    setTimeout(function() {
        self.loading(false);
    }, 4000);
}
ko.applyBindings(new model());
于 2013-07-12T11:16:45.640 回答
1

在 setTimeout 内,“this”上下文属于Window对象。setTimeout的this outsite 是Model 类构造函数。所以你必须使用:

var self = this;

然后在 setTimeout 内使用 self 而不是这个。

于 2013-07-12T11:18:11.427 回答