我们说我有一个像这样的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
不允许我做的参数...
答案 0 :(得分:1)
在这种情况下,没有区别因为Knockout正在创建一个计算的observable来为你包装函数。当值只是您要在UI中显示的内容时,无论哪种方式都可以。
当您想要自定义observable的行为时,它确实有所不同。例如,使用函数表单无法更新速率或从服务器回发中排除值。 computed observables的文档页面很好地解释了这些情况。