knockout attribute knockout.js

knockout.js - attribute - Cómo saber la fuente de observable computado



knockout visible (2)

Cuando se computable observable depende de muchos otros observables, ¿cómo saber qué cambio observable desencadenó la función de evaluación de este observable calculado?


Puede rastrear los cambios a los observables mediante el uso de extensores KO. Primero, debe crear la función de extensión. Aquí hay uno super simple que simplemente agrega una bandera al observable si ha cambiado.

ko.extenders.changeTracker = function(target, trackingPropertyName) { target.subscribe(function(value) { target[trackingPropertyName] = true; }); return target; }

Entonces deberías agregar este extensor al observable siendo rastreado. El trackingPropertyName se usaría para leer y escribir el indicador de seguimiento de cambios.

var trackingPropertyName = ''__mytracker''; this.firstName = ko.observable().extend({ changeTracker: trackingPropertyName }); this.lastName = ko.observable().extend({ changeTracker: trackingPropertyName });

Dentro de su cálculo, evaluaría estos indicadores (y los restablecería) para determinar qué observable ha cambiado.

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);

Aquí hay un Fiddle: https://jsfiddle.net/8so7zjy5

O una versión amigable para ES5: https://jsfiddle.net/8so7zjy5/1/


Es imposible averiguar qué desencadenó un cambio computed .

El archivo fuente relevante en realidad es bastante fácil de seguir, y si profundizas en él verás que un cálculo (también conocido como dependienteObservables) puede tener un cambio desencadenado a partir de una serie de fuentes. Diablos, para cuando se apaga la notificación de cambio real, varias llamadas asincrónicas a dependencias podrían haber causado el cambio. Ninguna de esa información está expuesta a los usuarios de la biblioteca KO.

Si te parece que quieres esto, necesitarás replantear tu enfoque. Sin embargo, sin ningún detalle sobre su contexto, es imposible ofrecer un asesoramiento más específico.