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
      • 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-deep-observable

  • npm package badge
  • Star
  • Edit on GitHub

Create observable objects where nested objects and arrays are also observable.

canReflect.new(DeepObservable, data)

Creates an observable object with data, where inner objects and arrays are converted to can-observable-object and can-observable-array types.

import { DeepObservable, Reflect as canReflect } from "can";

let obj = canReflect.new(DeepObservable, {
  inner: {
    prop: "value"
  }
});

obj.inner.on("prop", (ev, newVal) => {
  console.log(newVal); // -> "new value"
});

obj.inner.prop = "new value";

Parameters

  1. A {Object}:

    plain object from which observable values will derive.

Returns

{can-deep-observable}:

A new DeepObservable object.

prop: DeepObservable

Create a new property on can-observable-object that is a deep observable object.

import { ObservableObject, DeepObservable } from "can";

class Faves extends ObservableObject {
  static props = {
    config: DeepObservable
  };
}

let faves = new Faves({
  config: {
    inner: {
      config: "values"
    }
  }
});

faves.config.inner.on("config", (ev, newVal) => {
  console.log("New value:", newVal); // -> { enabled: true }
});

faves.config.inner.config = { enabled: true };

Use

DeepObservable is a type that turns an object, and nested objects, into ObservableObjects and ObservableArrays.

It's most useful as a way to take plain objects which have no definable structure, but nevertheless need to be observable. Since you can't predefine these objects on ObservableObjects, you can instead use DeepObservable as the type.

import { ObservableObject, DeepObservable, restModel } from "can";

class ServiceData extends ObservableObject {
  static props = {
    options: DeepObservable
  }
}

ServiceData.connection = restModel({
    Map: ServiceData,
    url: "/api/data/{id}"
});

ServiceData.get({ id: "1" }).then(data => {
  data.options.nested.props...
});

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