- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
似乎他们返回相同的结果,为什么要使用一个而不是另一个?
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));
最佳答案
因此,可订阅对象是一个 knockout 对象,不同于可观察对象或计算对象,但可观察对象和计算对象都继承自。可订阅是可以订阅的任何东西;任何可以发出代码的其他部分可以监听的事件的东西。这是observable.subscribe(function() {})
功能来源于。
另一方面,可观察对象是可订阅对象的一种特定类型:它是一个可订阅对象,它保存一个值,并在该值发生变化时向其订阅者发出新值。可观察对象的“具有当前值”部分不是“可订阅”的固有部分,只有“向其订阅者发送事件”部分才是。
用的不多,但是可以直接构造subscribables,会通过ko.isSubscribable
测试但未通过ko.isObservable
测试,因此这两种方法之间的区别。
虽然我个人还没有在实践中看到它,this blog post举例说明如何使用或扩展 ko.subscribable
通过在可订阅对象之上构建 Pub/Sub 接口(interface)来实现功能。
knockout documentation on custom functions 中的这张图表说明了这种关系。 .
但是请注意,上面的图表在某一点上有点欺骗性: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/
似乎他们返回相同的结果,为什么要使用一个而不是另一个? var computed = ko.computed(function(){return 'foo';}); var observable =
我有一个问题。请帮帮我。我有 ko.compulated,它有一个检查 ko.isObservable 变量,我需要 ko.compulated 不对这个变量的更改使用react。请参阅示例: ko.
我是一名优秀的程序员,十分优秀!