Knockout.js 淘汰:计算的可观测vs函数
当使用knockout时,使用只读计算观察值而不是简单函数的优势是什么 以以下viewmodel构造函数和html代码段为例:Knockout.js 淘汰:计算的可观测vs函数,knockout.js,knockout-2.0,computed-observable,Knockout.js,Knockout 2.0,Computed Observable,当使用knockout时,使用只读计算观察值而不是简单函数的优势是什么 以以下viewmodel构造函数和html代码段为例: var ViewModel = function(){ var self = this; self.someProperty = ko.observable("abc"); self.anotherProperty = ko.observable("xyz"); self.someComputedProperty = function(
var ViewModel = function(){
var self = this;
self.someProperty = ko.observable("abc");
self.anotherProperty = ko.observable("xyz");
self.someComputedProperty = function(){
return self.someProperty() + self.anotherProperty();
};
};
<input data-bind="value: someProperty"/>
<input data-bind="value: anotherProperty"/>
<p data-bind="text: someComputedProperty()"></p>
var ViewModel=function(){
var self=这个;
self.someProperty=ko.可观察(“abc”);
self.anotherProperty=ko.可观察(“xyz”);
self.someComputedProperty=函数(){
返回self.someProperty()+self.anotherProperty();
};
};
这里的一切似乎都如您所期望的那样工作,那么我是否有理由改用:
var ViewModel = function(){
var self = this;
self.someProperty = ko.observable("abc");
self.anotherProperty = ko.observable("xyz");
self.someComputedProperty = ko.computed(function(){
return self.someProperty() + self.anotherProperty();
});
};
<input data-bind="value: someProperty"/>
<input data-bind="value: anotherProperty"/>
<p data-bind="text: someComputedProperty"></p>
var ViewModel=函数(){
var self=这个;
self.someProperty=ko.可观察(“abc”);
self.anotherProperty=ko.可观察(“xyz”);
self.someComputedProperty=ko.computed(函数(){
返回self.someProperty()+self.anotherProperty();
});
};
我注意到,位于的文档声明“……声明性绑定只是作为计算的可观察对象实现的”,那么这是否意味着我需要在我的viewmodels中显式地使用它们?如果计算的可观察对象的唯一目的是对其进行简单绑定,那么使用函数将是等效的。绑定是在计算的可观察对象内部实现的,以跟踪依赖关系,因此当任何可观察对象发生更改时,它将重新触发绑定 <> P>关于计算的可观测值与函数有一些要考虑的事情
- 计算出的可观测值是缓存的,因此只有在创建该值和更新依赖项时才会更新该值。对于常规函数,每次都需要执行逻辑。如果许多事情都依赖于该值(比如集合中的每个项都与父项中的值绑定),那么该逻辑将一次又一次地运行
- 在JavaScript中,您还可以像使用其他可观察对象一样自由使用计算的可观察对象。这意味着您可以针对它们创建手动订阅,并从其他计算机依赖它们(调用函数也会创建此依赖关系)。您可以依赖KO中的常规实用程序方法,如
,以一般方式确定是否需要将其作为函数调用或不检索值KO.utils.unwrapObservable
- 如果最终希望将值发送到服务器,则JSON输出中将自然显示一个计算的可观察值,而一个普通函数的结果值在转换为JSON时将消失(您必须先做更多的工作,从该函数填充属性)