我是Knockout的初学者,我必须说我经常对何时使用()
感到困惑。是否有任何一般的提示/技巧,关于你何时不使用()
反对,因为目前我正在进行反复试验。如果绑定抛出错误或未更新值,我删除了()
我放了。
答案 0 :(得分:52)
我觉得现有的答案会跳过一个非常重要的混淆点:data-bind
属性。
当你使用Javascript,获取或设置observable时,你确实使用了parens。但是当你写data-bind="text: property"
时,即使使用observables ,也会遗漏parens 。
如下面的评论中所述,作为表达式的绑定或observbles的访问属性需要parens
visible: personName().length > 0
visible: person().Name().length > 0
visible: person().isVisible
请注意,最后一个person
和isVisisble
都是可观察的,但最后一个属性不使用parens!这样做的原因是我们将一个值传递给绑定而不是一个observable,它不会更新。
答案 1 :(得分:21)
在使用observable或执行任何其他方法时,在knockout中使用()
。
Knockout observables是函数,用于返回您要查找的内容或允许您指定新值。
在淘汰赛中,您使用object.property()
来检索值,并使用object.property(newValue)
为该属性分配值。
在淘汰赛website上查看文档,特别是observables部分,其中显示了在查询和编写可观察对象时使用()
。
引用:
var myViewModel = {
personName: ko.observable('Bob'),
personAge: ko.observable(123)
};
要读取observable的当前值,只需调用没有参数的observable。在此示例中,myViewModel.personName()将 返回'Bob',myViewModel.personAge()将返回123。
要向observable写入新值,请调用observable并将新值作为参数传递。例如,打电话 myViewModel.personName('Mary')会将名称值更改为'Mary'。
要将值写入模型对象上的多个可观察属性,可以使用链接语法。例如, myViewModel.personName('Mary')。personAge(50)将更改名称 值为'Mary',年龄值为50。
Knockout的interactive tutorial也很不错,值得一试。
答案 2 :(得分:3)
基本上无论何时使用可观察值(数组或其他),都应使用括号来获取值并设置值。
var something = ko.obserbable();
something(5); //set value
console.log(something()); //get value: 5
原因是大多数JS实现还不支持属性的getter和setter,所以可以像这样实现observable来解决这个限制。