30

我是 Knockout 的初学者,我必须说我经常对何时使用(). 是否有任何关于何时使用的一般提示/技巧,()因为目前我只是在反复试验。如果绑定抛出错误或不更新值,我将删除()其他内容。

4

3 回答 3

55

我觉得现有的答案跳过了一个非常重要的混淆点:data-bind属性。

确实,当您使用 Javascript 并获取或设置可观察对象时,您会使用括号。但是当你写作时,即使在使用 observables 时data-bind="text: property",你也忽略了括号。

编辑

正如下面的评论中所指出的,作为表达式的绑定,或 observble 的访问属性,需要括号

visible: personName().length > 0
visible: person().Name().length > 0
visible: person().isVisible

请注意,最后一个personisVisisble都是可观察的,但最后一个属性不使用括号!这样做的原因是我们将值传递给绑定而不是可观察对象,并且它不会更新。

于 2013-06-02T03:50:15.940 回答
21

()在使用 observables 或执行任何其他方法时,您可以在淘汰赛中使用。Knockout observables 是函数,被调用以返回您正在寻找的内容或允许您分配新值。

在淘汰赛中,您使用object.property()检索值并将object.property(newValue)值分配给该属性。

在淘汰网站上查看文档,特别是observables部分,它向您展示了()在查询和编写 observables 时的使用。

去引用:

var myViewModel = {
    personName: ko.observable('Bob'),
    personAge: ko.observable(123)
};
  • 要读取 observable 的当前值,只需调用不带参数的 observable。在此示例中,myViewModel.personName() 将返回 'Bob',而 myViewModel.personAge() 将返回 123。

  • 要将新值写入可观察对象,请调用可观察对象并将新值作为参数传递。例如,调用 myViewModel.personName('Mary') 会将名称值更改为 'Mary'。

  • 要将值写入模型对象上的多个可观察属性,您可以使用链接语法。例如,myViewModel.personName('Mary').personAge(50) 会将姓名值更改为 'Mary' 并将年龄值更改为 50。

Knockout 的交互式教程也很不错,值得一读。

于 2012-06-12T12:01:14.813 回答
3

基本上,每当您使用可观察值(数组或其他)时,您都应该使用括号来获取值并设置值

var something = ko.obserbable();
something(5); //set value
console.log(something()); //get value: 5

原因是大多数 JS 实现还不支持属性的 getter 和 setter,所以 observables 是这样实现的以绕过这个限制。

于 2012-06-12T12:03:19.303 回答