【发布时间】:2012-06-12 11:57:14
【问题描述】:
我是 Knockout 的初学者,我必须说我经常对何时使用 () 感到困惑。关于何时使用() 反对何时不使用,是否有任何一般提示/技巧,因为目前我只是在反复试验。如果绑定抛出错误或不更新值,我删除 () 否则我放。
【问题讨论】:
标签: javascript jquery knockout.js
我是 Knockout 的初学者,我必须说我经常对何时使用 () 感到困惑。关于何时使用() 反对何时不使用,是否有任何一般提示/技巧,因为目前我只是在反复试验。如果绑定抛出错误或不更新值,我删除 () 否则我放。
【问题讨论】:
标签: javascript jquery knockout.js
我觉得现有的答案跳过了一个非常重要的混淆点:data-bind 属性。
确实,当您使用 Javascript 并获取或设置可观察对象时,您会使用括号。但是,当您编写 data-bind="text: property" 时,即使在使用 observables 时也会省略括号。
正如下面评论中所指出的,作为表达式的绑定,或者访问 observble 的属性,需要括号
visible: personName().length > 0
visible: person().Name().length > 0
visible: person().isVisible
请注意,最后一个 person 和 isVisisble 都是可观察的,但最后一个属性不使用括号!这样做的原因是我们将值传递给绑定而不是可观察对象,并且它不会更新。
【讨论】:
visible: personName().length > 0
<!-- ko foreach: observableArray() -->。我不明白为什么会这样,但从 2.3.2 开始,这是真的。
className? 有时 需要在 JSX 内的括号内加上引号而不是原始字符串? bind(this) 到处都是?每个人都有一些怪癖,扔掉应该还不够!
在使用 observables 或执行任何其他方法时,您在淘汰赛中使用 ()。
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。
要将新值写入可观察对象,请调用可观察对象并将新值作为参数传递。例如,调用 myViewModel.personName('Mary') 会将名称值更改为 'Mary'。
要将值写入模型对象的多个可观察属性,您可以使用链接语法。例如, myViewModel.personName('Mary').personAge(50) 将更改名称 值为“玛丽”,年龄值为 50。
Knockout 的interactive tutorial 也不错,值得一试。
【讨论】:
基本上当您使用可观察值(数组或其他)时,您应该使用括号来获取值并设置值。
var something = ko.obserbable();
something(5); //set value
console.log(something()); //get value: 5
原因是大多数 JS 实现还不支持属性的 getter 和 setter,所以 observables 是这样实现的以绕过这个限制。
【讨论】: