Estoy usando KnockoutJS versión 2.0.0
Si estoy recorriendo todas las propiedades de un objeto, ¿cómo puedo probar si cada propiedad es un ko.observable? Esto es lo que he probado hasta ahora:
var vm = {
prop: ko.observable(''),
arr: ko.observableArray([]),
func: ko.computed(function(){
return this.prop + " computed";
}, vm)
};
for (var key in vm) {
console.log(key,
vm[key].constructor === ko.observable,
vm[key] instanceof ko.observable);
}
Pero hasta ahora todo es falso.
javascript
knockout.js
Adam Rackis
fuente
fuente

$.isArray(vm[key]()), pero ¿sabe cómo diferenciar observables de unko.computed?ko.isComputedfunción. El código sería el equivalente a lo que agregué a la respuesta anterior.Knockout tiene la siguiente función que creo que es lo que estás buscando:
fuente
Para agregar a la respuesta de RP Niemeyer, si simplemente está buscando determinar si algo es "suscribible" (que es el caso más frecuente). Entonces
ko.isSubscribabletambién está disponible.fuente
Estoy usando
Actualización : A partir de la versión 2.3.0,
ko.unwrapse agregó como sustituto deko.utils.unwrapObservablefuente