考虑这段代码:
function AppViewModel() {
this.firstName = ko.observable("");
this.lastName = ko.observable("");
this.fullName = ko.computed(function() {
return this.firstName() + " " + this.lastName()
}, this);
}
ko.applyBindings(new AppViewModel());
有一段时间我无法弄清楚为什么fullName变量没有正常工作。但后来我注意到我需要返回this.firstName()而不是返回this.firstName。为什么会那样?它只是一个奇怪的JavaScript约定还是有一些原因呢?我想了解更多有关JavaScript和Knockout的信息,这是我自己喜欢的原因,这也是我通过Knockout教程的原因。
答案 0 :(得分:2)
为什么会那样?它只是一个奇怪的JavaScript惯例或者是 有什么理由吗?
就是这样,因为this.firstName
是一个可观察的函数。如果您想获得它的价值,您应该对其进行评估this.firstName()
。然而,如果你想设置它的值,你应该传递一个值this.firstName("HandlerThatError")
。这是knockout.js
中可观察者的工作方式。
关于this.fullName
,这是一个计算的可观察量。 this.fullName
和this.firstName
,this.lastName
之间的主要区别在于this.fullName
的值取决于其他两个可观察值的值,而this.firstName
的值}和this.lastName
没有。因此,这称为计算可观察量。
来自knockout.js
documentation:
KO如何知道视图模型的某些部分何时发生变化?答:你需要 将模型属性声明为可观察对象,因为它们是 可以通知订阅者有关更改的特殊JavaScript对象, 并且可以自动检测依赖关系。
此外,
要读取observable的当前值,只需调用observable即可 没有参数。
和
要为observable写一个新值,请调用observable并传递 新值作为参数。