2013-07-12 3 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.Knockout self & this keyword gotach

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

поясните пожалуйста если возможно.

+2

Возможный дубликат [JavaScript «это» ключевое слово] (http://stackoverflow.com/questions/3127429/javascript-this-keyword) также http://stackoverflow.com/questions/962033/what-underlies-this -javascript-idiom-var-self-this и 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 of setTimeout имеет Модель класса конструктор. Таким образом, вы должны использовать:

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()); 
Смежные вопросы