使用剃刀语法敲除绑定问题

时间:2016-06-09 09:11:26

标签: asp.net-mvc knockout.js

我是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="" />

1 个答案:

答案 0 :(得分:1)

您在此处遇到的问题是,您的计算机正在尝试使用firstsecond,但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示例使用第二种形式。

相关问题