2017-04-25 3 views
1

Knockout JS를 통해 작성된 스크립트가 있습니다.넉 아웃 카운터 오류 (ASP.NET MVC)

여기 여기보기 코드

<span data-bind='text: numberOfClicks'>&nbsp;</span>/<span data-bind='text: totalnumberofClicks'>&nbsp;</span> 

이다 나는 경우 numberOfClicks이> = totalnumberofClicks 경고를받을 필요가 코드

function count_blocks() { 

    var length = $("#questions > div").length; 
    var ClickCounterViewModel = function() { 
     this.totalnumberofClicks = ko.observable(length); 
     this.numberOfClicks = ko.observable(1); 
     this.registerClick = function() { 
      this.numberOfClicks(this.numberOfClicks() + 1); 
      if (numberOfClicks >= totalnumberofClicks) { 
       alert("error!"); 

      } 
     }; 
    }; 
    ko.applyBindings(new ClickCounterViewModel()); 

} 

입니다.

하지만 오류가

Uncaught ReferenceError: numberOfClicks is not defined 
    at ClickCounterViewModel.registerClick (2141:169) 
    at HTMLButtonElement.<anonymous> (knockout-3.4.2.js:90) 
    at HTMLButtonElement.dispatch (jquery-3.1.1.js:5201) 
    at HTMLButtonElement.elemData.handle (jquery-3.1.1.js:5009) 

나는 그것을 고칠 수있는 방법이?

+2

은''에서 this' registerClick'은 항상 당신의 ViewModel 인스턴스를 참조하지 않습니다. 함수 선언에'.bind (this)'를 추가하거나'prototype'에서 정의하십시오. 'data-bind = "click을 사용하여'click' 바인딩으로 바인드 할 수도 있습니다 : registerClick.bind ($ data)"' – user3297291

답변

1

thisregisterClick은 방법 내의 범위입니다. self에 바인딩로 사용하여 액세스 외부 범위 변수 :

var ClickCounterViewModel = function() { 
    var self = this; 
    this.totalnumberofClicks = ko.observable(length); 
    this.numberOfClicks = ko.observable(1); 
    this.registerClick = function() { 
     self.numberOfClicks(self.numberOfClicks() + 1); 
     if (self.numberOfClicks() >= self.totalnumberofClicks()) { 
      alert("error!"); 
     } 
    }; 
}; 
+0

감사합니다. –