gpt4 book ai didi

knockout.js - isObservable 和 isSubscribable 的区别

转载 作者:行者123 更新时间:2023-12-04 04:04:49 33 4
gpt4 key购买 nike

似乎他们返回相同的结果,为什么要使用一个而不是另一个?

var computed = ko.computed(function(){return 'foo';});
var observable = ko.observable();
var observableArray = ko.observableArray();

console.log('computed isObservable', ko.isObservable(computed));
console.log('observable isObservable', ko.isObservable(observable));
console.log('observableArray isObservable', ko.isObservable(observableArray));

console.log('computed isSubscribable', ko.isSubscribable(computed));
console.log('observable isSubscribable', ko.isSubscribable(observable));
console.log('observableArray isSubscribable', ko.isSubscribable(observableArray));

所有日志为真。
http://jsfiddle.net/1fvjuj9v/1/

最佳答案

因此,可订阅对象是一个 knockout 对象,不同于可观察对象或计算对象,但可观察对象和计算对象都继承自。可订阅是可以订阅的任何东西;任何可以发出代码的其他部分可以监听的事件的东西。这是observable.subscribe(function() {})功能来源于。

另一方面,可观察对象是可订阅对象的一种特定类型:它是一个可订阅对象,它保存一个值,并在该值发生变化时向其订阅者发出新值。可观察对象的“具有当前值”部分不是“可订阅”的固有部分,只有“向其订阅者发送事件”部分才是。

用的不多,但是可以直接构造subscribables,会通过ko.isSubscribable测试但未通过ko.isObservable测试,因此这两种方法之间的区别。

虽然我个人还没有在实践中看到它,this blog post举例说明如何使用或扩展 ko.subscribable通过在可订阅对象之上构建 Pub/Sub 接口(interface)来实现功能。

knockout documentation on custom functions 中的这张图表说明了这种关系。 .
Chart displaying the relation between

但是请注意,上面的图表在某一点上有点欺骗性:ko.computed实际上源自 ko.observable不是来自 ko.subscribable直接地。因此,为什么 ko.isObservable(computed)返回真。然而,图表指示的关系是用于继承添加到 knockout 对象的自定义函数的关系。 (这是有道理的,因为这是找到它的文档页面的主题)

因此,如果您在 ko.subscribable.fn 上定义自定义函数,那么它将在计算和可观察对象上都可用...但是如果您在 ko.observable.fn 上定义一个它只能在 observables(和 observable 数组)上可用,而不是在计算上可用,尽管 ko.isObservable(computed)返回真。

关于knockout.js - isObservable 和 isSubscribable 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29913752/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com