knockoutjs中计算和函数之间的区别是什么

时间:2015-05-18 22:58:38

标签: javascript knockout.js

我们说我有一个像这样的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不允许我做的参数...

1 个答案:

答案 0 :(得分:1)

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

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