什么时候我应该在淘汰赛中使用括号

时间:2012-06-12 11:57:14

标签: javascript jquery knockout.js

我是Knockout的初学者,我必须说我经常对何时使用()感到困惑。是否有任何一般的提示/技巧,关于你何时不使用()反对,因为目前我正在进行反复试验。如果绑定抛出错误或未更新值,我删除了()我放了。

3 个答案:

答案 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

请注意,最后一个personisVisisble都是可观察的,但最后一个属性不使用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来解决这个限制。