我是Knockout的新手,我正在尝试绑定例如'first'变量,以便在vm构造期间正确初始化和显示:
@Html.EditorFor(model => model.first, new { htmlAttributes = new { @class = "form-control", data_bind = "value:first" } })
在我的脚本部分中我声明了以下内容:
var ViewModel = function (data) {
var self = this;
self.first = ko.observable(data.first);
self.second = ko.observable(data.second);
self.third = ko.computed(function () {
return Number(this.first()) + Number(this.second());
});
};
var data = { first: '1000', second: '1000' };
ko.applyBindings(new ViewModel(data));
显然我错了,但不知道在哪里。
更新:呈现的页面:
<input class="form-control text-box single-line" data-bind="value:first" data-val="true" data-val-number="my text" data-val-range="Please contact us" data-val-range-max="150000" data-val-range-min="5000" id="first" name="first" type="text" value="" />
答案 0 :(得分:1)
您在此处遇到的问题是,您的计算机正在尝试使用first
和second
,但this
的值在该上下文中将是错误的。这意味着当淘汰赛尝试评估该功能时,它将会出错,从而打破页面的其余部分。
最快的修复,因为您已经在使用self
,只是在计算中使用它:
self.third = ko.computed(function () {
return Number(self.first()) + Number(self.second());
});
另一种解决方法是将this
的值设为您想要的值,这可以通过使用bind
来实现:
self.third = ko.computed(function () {
return Number(this.first()) + Number(this.second());
}.bind(this));
您会看到一些淘汰赛computed
示例使用第二种形式。