当前位置:  开发笔记 > 编程语言 > 正文

何时使用或不在数据绑定表达式中使用带有observable的括号

如何解决《何时使用或不在数据绑定表达式中使用带有observable的括号》经验,为你挑选了1个好方法。

我已经看到了其他线索,但我仍然感到困惑,我想我在这里提出了一个不同的案例.

我正在使用显示模式将视图模型对象返回到我的HTML文档.因此,我有一个看起来像这样的视图模型对象:

var vm = function() {
   var customProperty = ko.numbericObservable(0);

   return {
      customProperty: customProperty
   };
} ();

从这里,您可以看到customProperty被分配给初始值为0的Knockout数字observable.

在包含上面的JavaScript的HTML文档中,我有一个带有data-bind属性的SPAN元素,该属性订阅了customProperty observable,如下所示:


到现在为止还挺好.上面的工作正常,这意味着每当我在脚本中更改customProperty的值时,SPAN中的文本立即更新.例如,我可以成功轻松地使用此表达式将customProperty observable的值从0更改为10:

vm.customProperty(10);

我的问题:

    请注意,在引用customPropertydata-bind属性中的值时,我没有使用括号.为什么不要求括号?

    我发现使用括号也有效:

我理解为什么使用括号工作(因为我正在读取Knockout observable的值).但为什么括号不需要呢?换句话说,为什么第1点的数据绑定表达式会起作用?

    最后,这项任务实际发生了什么?

    var customProperty = ko.numericObservable(0);

customProperty最终是否持有一个指向函数的指针customProperty()



1> JotaBe..:

    当ko解析绑定时,它会检查表达式是否是一个observable,正如你所知道的那样是一个函数.如果表达式是可观察的,ko会自动展开值以显示它,但它也允许订阅和通知.

    在这种情况下,当ko解析表达式时,它会找到一个值,而不是一个可观察的值,因此,它也可以正常显示值(值更改>视图更新).但是,您将失去从视图到值的绑定(输入值更改> observable未更新),因为它不是可观察的.有关更多详细信息,请参阅下面的说明和摘要.

    customProperty是一个函数,特别是一个函数,ko.observable它意味着支持订阅和通知,除了使用()(newValue)语法读取或设置值

注意:使用和不使用括号之间的差异是巨大的.如果你这样做:



正如我在1中解释的那样,ko发现这customProperty是一个可观察的,所以当用户更改其中的值时input,新值将被写回observable.如果你这样做:



正如我在2中解释的那样,ko找到了一个值,而不是一个可观察的值.因此,如果用户input通过键入来更改其值,则新值不会反馈给observable,因为ko不知道它是可观察的.(但是,如果更新了可观察值,则视图会更改,因为在表达式求值期间会发现并订阅依赖项).

var vm = {
	customProperty: ko.observable(10)
};

ko.applyBindings(vm);
body {
  font-family: Segoe, Arial
}



data-bind="value: customProperty()"

If you change the input text, customProperty is not updated

data-bind="value: customProperty"

If you change the input text, customProperty changes

customProperty value:
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有