敲除计数器错误(ASP.NET MVC)

问题描述:

我有通过Knockout JS编写的脚本。敲除计数器错误(ASP.NET MVC)

这里是视图代码

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

这里是代码

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

} 

我需要得到警报后numberOfClicks> = totalnumberofClicks。

但我有错误

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'并不总是指向您的视图模型的实例。将'.bind(this)'添加到函数声明中,或者在我们的'prototype'中定义它。你也可以使用'data-bind ='点击:registerClick.bind($ data)''' – user3297291

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

'''''''''''''' –