DoneJS StealJS jQuery++ FuncUnit DocumentJS
6.6.1
5.33.3 4.3.0 3.14.1 2.3.35
  • About
  • Guides
  • API Docs
  • Community
  • Contributing
  • Bitovi
    • Bitovi.com
    • Blog
    • Design
    • Development
    • Training
    • Open Source
    • About
    • Contact Us
  • About
  • Guides
  • API Docs
    • Observables
      • can-bind
      • can-compute
      • can-debug
      • can-deep-observable
      • can-define
      • can-define/list/list
      • can-define/map/map
      • can-define-backup
      • can-define-stream
      • can-define-stream-kefir
      • can-event-queue
        • ./map/
        • ./type/
        • ./value/
          • @can.dispatch
          • @can.getWhatIChange
          • @can.isBound
          • @can.offValue
          • @can.onValue
          • handlers
          • off
          • on
          • onBound
          • onUnbound
      • can-kefir
      • can-list
      • can-map
      • can-map-compat
      • can-map-define
      • can-observable-array
      • can-observable-object
      • can-observation
      • can-observation-recorder
      • can-observe
      • can-simple-map
      • can-simple-observable
      • can-stream
      • can-stream-kefir
      • can-value
    • Views
      • can-attribute-observable
      • can-component
      • can-observable-bindings
      • can-stache
      • can-stache-bindings
      • can-stache-converters
      • can-stache-element
      • can-stache-route-helpers
      • can-view-autorender
      • can-view-callbacks
      • can-view-import
      • can-view-live
      • can-view-model
      • can-view-parser
      • can-view-scope
      • can-view-target
      • steal-stache
    • Data Modeling
      • can-connect
      • can-connect-ndjson
      • can-connect-tag
      • can-define-realtime-rest-model
      • can-define-rest-model
      • can-fixture
      • can-fixture-socket
      • can-local-store
      • can-memory-store
      • can-ndjson-stream
      • can-query-logic
      • can-realtime-rest-model
      • can-rest-model
      • can-set-legacy
      • can-super-model
    • Routing
      • can-deparam
      • can-param
      • can-route
      • can-route-hash
      • can-route-mock
      • can-route-pushstate
    • JS Utilities
      • can-assign
      • can-define-lazy-value
      • can-diff
      • can-globals
      • can-join-uris
      • can-key
      • can-key-tree
      • can-make-map
      • can-parse-uri
      • can-queues
      • can-string
      • can-string-to-any
    • DOM Utilities
      • can-ajax
      • can-attribute-encoder
      • can-child-nodes
      • can-control
      • can-dom-data
      • can-dom-events
      • can-dom-mutate
      • can-event-dom-enter
      • can-event-dom-radiochange
      • can-fragment
    • Data Validation
      • can-type
      • can-validate
      • can-validate-interface
      • can-validate-legacy
      • can-validate-validatejs
    • Typed Data
      • can-cid
      • can-construct
      • can-construct-super
      • can-data-types
      • can-namespace
      • can-reflect
      • can-reflect-dependencies
      • can-reflect-promise
      • can-types
    • Polyfills
      • can-symbol
      • can-vdom
    • Core
    • Infrastructure
      • can-global
      • can-test-helpers
    • Ecosystem
    • Legacy
  • Community
  • Contributing
  • GitHub
  • Twitter
  • Chat
  • Forum
  • News
Bitovi

@can.getWhatIChange

  • Edit on GitHub

Return observables whose values are affected by attached event handlers

@can.getWhatIChange()

The @can.getWhatIChange symbol is added to make sure can-debug can report all the observables whose values are set by value-like observables.

This function iterates over the event handlers attached to the observable's value event and collects the result of calling @can.getChangesDependencyRecord on each handler; this symbol allows the caller to tell what observables are being mutated by the event handler when it is executed.

In the following example a can-simple-observable instance named month is created and when its value changes the age property of the map can-simple-map instance is set. The event handler that causes the mutation is then decatorated with @can.getChangesDependencyRecord to register the mutation dependency.

var month = new SimpleObservable(11);
var map = new SimpleMap({ age: 30 });
var canReflect = require("can-reflect");

var onValueChange = function onValueChange() {
map.set("age", 31);
};

onValueChange[canSymbol.for("can.getChangesDependencyRecord")] = function() {
return {
    keyDependencies: new Map([ [map, new Set(["age"])] ])
}
};

canReflect.onValue(month, onValueChange);
month[canSymbol.for("can.getWhatIChange")]();

The dependency records collected from the event handlers are divided into two categories:

  • mutate: Handlers in the mutate/domUI queues
  • derive: Handlers in the notify queue

Since event handlers are added by default to the "mutate" queue, calling @can.getWhatIChange on the month instance returns an object with a mutate property and the keyDependencies Map registered on the onValueChange handler.

If multiple event handlers were attached to month, the dependency records of each handler are merged by @can.getWhatIChange. Please check out the can-reflect-dependencies docs to learn more about how this symbol is used to keep track of custom observable dependencies.

CanJS is part of DoneJS. Created and maintained by the core DoneJS team and Bitovi. Currently 6.6.1.

On this page

Get help

  • Chat with us
  • File an issue
  • Ask questions
  • Read latest news