javascript - Determine si la propiedad de un objeto es ko.observable
knockout.js (4)
Estoy usando la versión 2.0.0 de KnockoutJS
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 intentado 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.
Estoy usando
ko.utils.unwrapObservable(vm.key)
Actualización : a partir de la versión 2.3.0, se agregó ko.unwrap
como sustituto de ko.utils.unwrapObservable
Knockout incluye una función llamada ko.isObservable()
. Puede llamarlo como ko.isObservable(vm[key])
.
Actualización del comentario:
Aquí hay una función para determinar si algo es un observable calculado:
ko.isComputed = function (instance) {
if ((instance === null) || (instance === undefined) || (instance.__ko_proto__ === undefined)) return false;
if (instance.__ko_proto__ === ko.dependentObservable) return true;
return ko.isComputed(instance.__ko_proto__); // Walk the prototype chain
};
ACTUALIZACIÓN: Si está utilizando KO 2.1+, puede usar ko.isComputed
directamente.
Knockout tiene la siguiente función que creo que es lo que estás buscando:
ko.isObservable(vm[key])
Para seguir la respuesta de RP Niemeyer, si solo está buscando determinar si algo es "susceptible de suscribirse" (lo cual es más frecuente). Entonces ko.isSubscribable
también está disponible.