Knockout.js Knockoutjs绑定到属性vs属性()
我可以用两种不同的方式编写knockoutjs数据绑定表达式:Knockout.js Knockoutjs绑定到属性vs属性(),knockout.js,Knockout.js,我可以用两种不同的方式编写knockoutjs数据绑定表达式: 1. <div data-bind="text: FirstName"></div> 2. <div data-bind="text: FistName()"></div> 1。 2. 注意第二个例子中FirstName后面的两个paren。他们两个似乎都工作。有区别吗 我建议您阅读以下文章: 文章引述: 大多数绑定都会对传递的值调用ko.utils.unwrapObservab
1. <div data-bind="text: FirstName"></div>
2. <div data-bind="text: FistName()"></div>
1。
2.
注意第二个例子中FirstName后面的两个paren。他们两个似乎都工作。有区别吗 我建议您阅读以下文章: 文章引述: 大多数绑定都会对传递的值调用
ko.utils.unwrapObservable
它将安全地返回可观测值和
不可见。但是,在绑定中,如果在
表达式,则需要将其作为函数引用。同样,在
您通常需要将观察值作为函数引用的代码,
除非你真的想传递可观察对象本身(而不是
价值)
。。。
...
有一点不同
只有当FirstName
是一个ko.observable
时,它们才能同时工作。如果是普通值,则只有第一个变量有效
一个可观察的事物并不直接持有它的价值。它是一个提供对值的访问的函数。因此,必须调用它来获取值(即严格正确的istext:FistName()
)
但是淘汰赛是有帮助的,而且是预期的。因此,如果你不是自己做的话,它会为你召唤可观察的
负责此操作的是帮助函数ko.utils.unwrapObservable()
,它接受一个参数,确定它是可观察值还是普通值,并在这两种情况下返回其值
Knockout在您定义的每个绑定上都使用此函数,因此无论您是自己调用可观察对象(text:FistName()
),还是让Knockout在幕后执行(text:FirstName
)
怪癖: Knockout解析绑定表达式
:
,并确定
是简单标识符还是更复杂的标识符
只要
是像FirstName
这样的简单标识符,就会自动应用unwrapObservable()
,因为情况是明确的
但是每当
变得更复杂时,比如'Dear'+FirstName
-knockout就会从表达式构造一个自定义函数。现在事情变得模棱两可,你需要自己调用可观察对象,比如:“亲爱的”+FirstName()
比较:谢谢大家!现在有道理了。
<div data-bind="visible: someFlag">...</div>
<div data-bind="visible: !someFlag()">...</div>