【问题标题】:what is the difference between a computed and a function in knockoutjs [duplicate]淘汰赛中的计算和函数有什么区别[重复]
【发布时间】:2015-05-18 22:58:38
【问题描述】:

假设我有一个这样的 viewModel:

function ViewModel() {
    var $t = this;
    this.a = ko.observable(5);
    this.f = function(val) { 
        return $t.a() * (val === 'simple' ? 2: 10);
    };
    this.c = ko.computed(function() { 
        return $t.a() * 20; 
    }); 
};

ko.applyBindings(new ViewModel());

和这样的 HTML:

<div><input data-bind="value: a"/></div>
<div data-bind="text: f('simple')"></div>
<div data-bind="text: f('complex')"></div>
<div data-bind="text: c"></div>

这会导致这个初始页面([5] 描述了一个输入字段):

[5]
10
50
100

当我将输入字段中的 5 更改为 10 时,我看到:

[10]
20
100
200

所以绑定起作用了。在此处查看工作演示:http://jsfiddle.net/1vrz71fs/2/。

我想了解的是使用 ko.computed(...) 和普通旧函数之间的区别,它们似乎都可以正常工作。使用其中一个是否有缺点/优点。函数方法似乎更方便,因为它接受 ko.computed 不允许我做的参数...

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    在这种情况下,没有区别,因为 Knockout 正在创建一个计算的 observable 来为您包装函数。当值只是您要在 UI 中显示的内容时,任何一种方式都可以。

    当您想要自定义 observable 的行为时,它确实会有所作为。例如,函数表单无法限制更新速率或从服务器回发中排除值。 computed observables 的文档页面很好地解释了这些情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 2015-08-12
      • 2013-12-04
      • 2013-08-26
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多