我将代码上传到jsFiddle,你可以在那里测试。
这是问题,而是获得一个完整的名称,它显示了该函数的源代码。如果我使用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());
};
答案 0 :(得分:5)
你应该使用ko.computed:
self.fullName = ko.computed(function(){
return self.firstName() + " " + self.lastName();
},this);
这将确保无论何时firstName
或lastName
的值发生变化,更改都会反映在您的ko.computed函数中,并且您不必手动更新范围&#39 ; s值。
有关详细说明,请参阅:
http://knockoutjs.com/documentation/computedObservables.html
此链接上或多或少提供相同的示例。
如果您不想使用ko.computed,请参阅此链接:http://jsfiddle.net/2RPsw/10/