敲除计数器错误(ASP.NET MVC)
问题描述:
我有通过Knockout JS编写的脚本。敲除计数器错误(ASP.NET MVC)
这里是视图代码
<span data-bind='text: numberOfClicks'> </span>/<span data-bind='text: totalnumberofClicks'> </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)
我怎样才能解决这个问题?
答
this
在registerClick
范围内仅为方法范围。通过绑定到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
'''''''''''''' –
的'this'在'registerClick'并不总是指向您的视图模型的实例。将'.bind(this)'添加到函数声明中,或者在我们的'prototype'中定义它。你也可以使用'data-bind ='点击:registerClick.bind($ data)''' – user3297291