【问题标题】:When should I use parentheses in knockout我什么时候应该在淘汰赛中使用括号
【发布时间】:2012-06-12 11:57:14
【问题描述】:

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

【问题讨论】:

标签: javascript jquery knockout.js


【解决方案1】:

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

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

编辑

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

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

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

【讨论】:

  • 好点,唯一的例外是如果在 data-bind 属性中使用了 JavaScript 表达式,在这种情况下需要括号 ,例如visible: personName().length > 0
  • 使用基于注释的虚拟绑定时也需要括号,如:<!-- ko foreach: observableArray() -->。我不明白为什么会这样,但从 2.3.2 开始,这是真的。
  • 请参阅stackoverflow.com/a/11318720/1154642,了解在表达式中使用可观察对象的另一个示例。
  • @ChrisHawkes 我看不出这与问题有什么关系。此外,如果您认为语法陷阱足以抛弃整个库,我不知道您如何容忍 React(我喜欢)。 className? 有时 需要在 JSX 内的括号内加上引号而不是原始字符串? bind(this) 到处都是?每个人都有一些怪癖,扔掉应该还不够!
  • 我认为这个链接会有所帮助knockmeout.net/2011/06/…
【解决方案2】:

在使用 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 也不错,值得一试。

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 2016-06-07
      • 1970-01-01
      • 2011-05-01
      • 2010-12-30
      相关资源
      最近更新 更多