2013-07-12 49 views
-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代碼。淘汰自我和這個關鍵詞gotach

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

請說明是否可能。

+2

[JavaScript的關鍵字 「this」](http://stackoverflow.com/questions/3127429/javascript-this-keyword)也可能重複http://stackoverflow.com/questions/962033/what-underlies-this -javascript-成語-VAR自本和http://stackoverflow.com/questions/3309516/when-to-use-self-in-javascript – nemesv

+0

'的console.log()'是你的朋友! – Niko

+0

你爲什麼要創建一個新的問題,而我想在這裏回答你的問題:http://stackoverflow.com/questions/17590336/how-to-bind-list-of-images-using-knockout-in-page-與裝載微調#comment25602854_17590336 – mael

回答

1

的setTimeout的裏面的 '這個' 背景是窗口對象。 凡爲 outsite的setTimeout的是Model類的構造函數的。 所以,你必須使用:

var self = this; 

,然後裏面的setTimeout,而不是使用這種自我。

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());