DoneJS StealJS jQuery++ FuncUnit DocumentJS
4.3.0
5.0.0 3.13.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-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-define
      • can-observation
      • can-observation-recorder
      • can-observe
        • Properties
          • defineProperty
          • Array
          • Object
        • Decorators
          • async
          • resolver
        • Object Behaviors
          • @can.isBound
          • @can.offKeyValue
          • @can.offPatches
          • @can.onKeyValue
          • @can.onPatches
        • Array Behaviors
          • pop
          • push
          • reverse
          • shift
          • sort
          • splice
          • unshift
        • Function Behaviors
          • @can.computedPropertyDefinitions
          • @can.defineInstanceKey
          • @can.offInstanceBoundChange
          • @can.offInstancePatches
          • @can.onInstanceBoundChange
          • @can.onInstancePatches
      • can-simple-map
      • can-simple-observable
      • can-stream
      • can-stream-kefir
      • can-value
    • Data Modeling
      • can-connect
      • can-connect-feathers
      • can-fixture
      • can-fixture-socket
      • can-ndjson-stream
      • can-set
    • Views
      • can-component
      • can-stache
      • can-stache-bindings
      • can-stache-converters
      • can-stache-route-helpers
      • can-view-autorender
      • can-view-callbacks
      • can-view-import
      • can-view-live
      • can-view-model
      • can-view-nodelist
      • can-view-parser
      • can-view-scope
      • can-view-target
      • react-view-model
      • react-view-model/component
      • steal-stache
    • 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
      • can-util
      • can-zone
      • can-zone-storage
    • 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-define-validate-validatejs
      • 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

Array

  • Edit on GitHub

Create observable Array instances or types.

new observe.Array([items])

Create an instance of an observable array.

import observe from "can-observe";

const hobbies = new observe.Array( [ "JS", "Reading" ] );

class extends observe.Array {...}

Extend and create your own Array type:

import observe from "can-observe";

class TodoList extends observe.Array {
    get active() {
        return this.filter( function( todo ) {
            return todo.complete === false;
        } );
    }
}

Getter properties like active above are computed. Meaning that if they are bound subsequent reads are not re-evaluated.

Mixed in methods and properties

Instances of observe.Array have all methods and properties from can-event-queue/map/map:

  • addEventListener - Register an event handler to be called when an event is dispatched.

  • @can.getWhatIChange - Return observables whose values are affected by attached event handlers

  • @can.isBound - Return if the observable is bound to.

  • @can.offKeyValue - Unregister an event handler to be called when an event is dispatched.

  • @can.onKeyValue - Register an event handler to be called when a key value changes.

  • dispatch - Dispatch event and key binding handlers.

  • listenTo - Listen to an event and register the binding for simplified unbinding.

  • off - A shorthand method for unbinding an event.

  • on - A shorthand method for listening to event.

  • one - Register an event handler that gets called only once.

  • removeEventListener - Unregister an event handler to be called when an event is dispatched.

  • stopListening - Stops listening for registered event handlers.

Example:

class MyArray extends observe.Array {

}

const arrayInstance = new MyArray( [] );

canReflect.onPatches( arrayInstance, function( patches ) { /* ... */ } );

Mixed-in type methods and properties

Extended observe.Array constructor functions have all methods and properties from can-event-queue/type/type:

  • @can.offInstanceBoundChange - Stop listening to when an instance's bound status changes.

  • @can.offInstancePatches - Stop listening to patch changes on any instance.

  • @can.onInstanceBoundChange - Listen to when any instance is bound for the first time or all handlers are removed.

  • @can.onInstancePatches - Listen to patch changes on any isntance.

Example:

class MyArray extends observe.Array {

}

canReflect.onInstancePatches( MyArray, function( instance, patches ) { /* ... */ } );

Use Cases

observe.Array is used to make observable arrays commonly used by the model layer.

Models

Use observe.Array to create observable arrays for use with can-connect. The following creates a simple TodoList type:

import observe from "can-observe";
import baseMap from "can-connect/can/base-map/base-map";

class Todo extends observe.Object { /* ... */ }

class TodoList extends observe.Array {
    get active() {
        return this.filter( function( todo ) {
            return todo.complete === false;
        } );
    }
    get complete() {
        return this.filter( function( todo ) {
            return todo.complete === true;
        } );
    }
    get allComplete() {
        return this.length === this.complete.length;
    }
    get saving() {
        return this.filter( function( todo ) {
            return todo.isSaving();
        } );
    }
    updateCompleteTo( value ) {
        this.forEach( function( todo ) {
            todo.complete = value;
            todo.save();
        } );
    }
    destroyComplete() {
        this.complete.forEach( function( todo ) {
            todo.destroy();
        } );
    }
}

baseMap( {
    url: "/api/todos",
    Map: Todo
} );

Note that active, complete, allComplete, and saving are made into can-observation-backed properties. Once bound, they will only update their value once one of their dependencies has updated.

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

On this page

Get help

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