在JavaScript和knockout.js中,为什么可以'我不返回一个变量吗?为什么我必须返回变量,就好像它
In JavaScript and knockout.js, why can't I return a variable? Why must I return the variable as if it's a method?
考虑以下代码片段:
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教程的原因。
为什么是那样?这只是一个奇怪的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
文档:
KO如何知道视图模型的某些部分何时发生更改?答案:你需要将模型属性声明为可观察性,因为可以向订阅者通知更改的特殊JavaScript对象,并且可以自动检测依赖性。
此外,
要读取可观测值的当前值,只需用没有参数。
和
要给可观测值写一个新值,请调用可观测值并通过将新值作为参数。
相关文章:
- 为什么变量不计数
- 为什么变量范围在本例中不可用
- 为什么变量 b 的值在这个 JavaScript 代码中是“js”
- 为什么变量在导入的文件中不可见
- 无法理解为什么变量未定义
- 为什么变量显示为未定义
- 为什么变量没有被传递到谷歌标签管理器的数据层
- 为什么变量不相等
- 为什么变量没有定义?
- 为什么变量在一种情况下用单引号发送,而在另一种情况下不加引号
- 当我触发事件时,为什么变量没有更新?
- 为什么变量会成为窗口对象上的键
- 当我使用setTimeout方法时,为什么变量不保持不变?
- 为什么变量不能从aspx.vb传递到aspx
- 为什么变量在$(document).keypress中变为undefined ?
- 为什么变量不被传递与我的jquery加载语句到php
- 在下面的javascript代码中,为什么变量不能被函数访问
- JS:为什么变量放置会破坏我的代码
- 为什么变量名是"$scope"必要的
- 为什么变量提升发生在JavaScript中,就执行上下文而言