首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道计算可观测值的来源

如何知道计算可观测值的来源
EN

Stack Overflow用户
提问于 2016-07-27 11:27:48
回答 2查看 146关注 0票数 0

当计算可观测依赖于许多其他可观测时,如何知道是哪个可观测变化触发了该计算可观测的求值函数?

EN

回答 2

Stack Overflow用户

发布于 2016-07-27 14:09:20

不可能找出是什么触发了computed__的更改。

The relevant source file实际上很容易理解,如果你深入研究它,你会发现一个计算机化的(也就是。dependentObservables)可以从多个来源触发更改。见鬼,当实际的更改通知发出时,对依赖项的多个异步调用可能已经导致了更改。这些信息都不会向KO库的用户公开。

如果你发现自己想要这个,你需要重新考虑你的方法。如果没有关于你的背景的任何细节,就不可能提供更具体的建议。

票数 3
EN

Stack Overflow用户

发布于 2016-07-27 21:19:52

您可以使用KO扩展器跟踪对可观察对象的更改。首先,您必须创建扩展函数。下面是一个非常简单的示例,它只需在可观察对象发生更改时添加一个标记即可。

代码语言:javascript
复制
ko.extenders.changeTracker = function(target, trackingPropertyName) {
  target.subscribe(function(value) {
    target[trackingPropertyName] = true;
  });
  return target;
}

然后,您必须将此扩展器添加到被跟踪的可观察对象中。trackingPropertyName将用于读取和写入更改跟踪标志。

代码语言:javascript
复制
var trackingPropertyName = '__mytracker';
this.firstName = ko.observable().extend({ changeTracker: trackingPropertyName });
this.lastName = ko.observable().extend({ changeTracker: trackingPropertyName });

在您的计算中,您将评估这些标志(并重置它们),以确定哪个观察值发生了变化。

代码语言:javascript
复制
this.fullName = ko.pureComputed(function() {
  var f = this.firstName() || '';
  var l = this.lastName() || '';
  if (this.firstName[trackingPropertyName]) {
    // firstName changed code here -- plus reset the flag
    this.firstName[trackingPropertyName] = false;
  }
  if (this.lastName[trackingPropertyName]) {
    // lastName changed code here -- plus reset the flag
    this.lastName[trackingPropertyName] = false;
  }
  return f + ' ' + l;
}, this);

这是一个小提琴:https://jsfiddle.net/8so7zjy5

或者一个ES5友好的版本:https://jsfiddle.net/8so7zjy5/1/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38603205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档