KnockoutJs,无法获得正确的值

时间:2012-10-08 15:42:44

标签: knockout.js knockout-2.0

我将代码上传到jsFiddle,你可以在那里测试。

http://jsfiddle.net/2RPsw/1/

这是问题,而是获得一个完整的名称,它显示了该函数的源代码。如果我使用ko.computed,它将起作用。我在下面做的也应该没问题。有人可以向我解释为什么它显示源代码,而不是值。

            <p>First name: <input data-bind="value: firstName" /></p>
            <p>Last name: <input data-bind="value: lastName" /></p>
            <p>Full name: <span data-bind="text: fullName"></span></p>?

KO代码:

function AppViewModel() {

    self = this;

    self.firstName = ko.observable("Bert");
    self.lastName = ko.observable("Bertington");
    self.fullName = function(){
        return  self.firstName() + " " + self.lastName();

    };
}

// Activates knockout.js
ko.applyBindings(new AppViewModel());?

更新

回答TCM的问题。为什么我不想使用ko.computed。不是我不想使用它,只是因为我很困惑,不知道何时使用它。例如

以下代码来自淘汰第一个教程。它不使用ko.computegd,但它可以工作。

http://learn.knockoutjs.com/#/?tutorial=intro

self.capName = function(){
    var curVal = self.lastName();
    self.lastName(curVal.toUpperCase());
};

1 个答案:

答案 0 :(得分:5)

你应该使用ko.computed:

 self.fullName = ko.computed(function(){
        return  self.firstName() + " " + self.lastName();

 },this);

这将确保无论何时firstNamelastName的值发生变化,更改都会反映在您的ko.computed函数中,并且您不必手动更新范围&#39 ; s值。

有关详细说明,请参阅:

http://knockoutjs.com/documentation/computedObservables.html

此链接上或多或少提供相同的示例。

如果您不想使用ko.computed,请参阅此链接:http://jsfiddle.net/2RPsw/10/