Dun*_*can 54 knockout-2.0 knockout.js computed-observable
使用knockout时,使用只读计算的observable而不是简单函数有什么好处?
以下是viewmodel构造函数和html代码段,例如:
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>
Run Code Online (Sandbox Code Playgroud)
这里的一切似乎都像你期望的那样工作,所以我应该使用以下原因:
?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>
Run Code Online (Sandbox Code Playgroud)
我注意到http://knockoutjs.com/documentation/computedObservables.html上的文档声明"...声明性绑定只是作为计算的observables实现",所以这是否意味着我需要在我的viewmodels中明确使用它们?
RP *_*yer 74
如果计算的observable的唯一目的是对它进行简单绑定,那么使用函数将是等效的.绑定在计算的observable内部实现,以跟踪依赖关系,因此当任何可观察对象发生更改时,它将重新触发绑定.
以下是计算可观察量与函数的关系
计算的observable的值是高速缓存的,因此只有在创建它时以及更新依赖项时才会更新它.对于常规函数,您需要每次都执行逻辑.如果很多事情取决于值(比如集合中的每个项目都对从父值绑定),那么这个逻辑将会得到一次又一次地运行.
在您的JavaScript中,您也可以像使用其他可观察对象一样自由使用计算的可观察对象.这意味着您可以针对它们创建手动订阅,并从其他计算机中依赖它们(调用函数也会创建此依赖项).您可以依赖KO中的常规实用程序方法,ko.utils.unwrapObservable
一般确定是否需要将其作为函数调用以检索值.
如果最终你想将值发送到服务器,计算的observable将自然地出现在你的JSON输出中,而正常函数的结果将在转换为JSON时消失(你需要做更多工作)首先从该函数填充属性).
归档时间: |
|
查看次数: |
22713 次 |
最近记录: |