DoneJS StealJS jQuery++ FuncUnit DocumentJS
3.14.1
5.0.0 4.3.0 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-compute
      • can-define
      • can-define/list/list
      • can-define/map/map
      • can-define-stream
      • can-define-stream-kefir
      • can-event
      • can-event/async/async
      • can-event/batch/batch
      • can-event/lifecycle/lifecycle
      • can-kefir
      • can-list
      • can-map
      • can-map-backup
      • can-map-define
      • can-observation
      • can-observe
      • can-simple-map
      • can-simple-observable
      • can-stream
      • can-stream-kefir
    • Data Modeling
      • can-connect
        • behaviors
          • ./base/
          • ./cache-requests/
          • ./can/constructor-hydrate/
          • ./can/map/
          • ./can/merge/
          • ./can/ref/
          • ./constructor/callbacks-once/
          • ./constructor/
          • ./constructor/store/
          • ./data/callbacks/
          • ./data/callbacks-cache/
          • ./data/combine-requests/
          • ./data/localstorage-cache/
          • ./data/memory-cache/
          • ./data/parse/
          • ./data/url/
          • ./data/worker/
          • ./fall-through-cache/
          • ./real-time/
            • methods
              • createInstance
              • destroyInstance
              • updateInstance
            • data callbacks
              • createdData
              • destroyedData
              • updatedData
        • modules
          • ./can/base-map/
          • ./can/model/
          • ./can/super-map/
          • ./can/tag/
          • ./helpers/map-deep-merge
          • ./helpers/weak-reference-map
        • data types
          • DataInterface
          • Instance
          • InstanceInterface
          • List
          • ListData
      • can-connect-cloneable
      • can-connect-feathers
      • can-connect-ndjson
      • can-connect-signalr
      • can-fixture
      • can-fixture-socket
      • can-ndjson-stream
      • can-set
    • Views
      • can-component
      • can-ejs
      • can-element
      • can-react-component
      • can-stache
      • can-stache/helpers/route
      • can-stache-bindings
      • can-stache-converters
      • can-view-autorender
      • can-view-callbacks
      • can-view-href
      • 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-pushstate
    • JS Utilities
      • can-assign
      • can-define-lazy-value
      • can-globals
      • can-key-tree
      • can-make-map
      • can-parse-uri
      • can-string
      • can-string-to-any
      • can-util
      • can-zone
      • can-zone-storage
    • DOM Utilities
      • can-ajax
      • can-attribute-encoder
      • can-control
      • can-dom-events
      • can-event-dom-enter
      • can-event-dom-radiochange
      • can-jquery
    • 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-namespace
      • can-reflect
      • 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

real-time

  • Edit on GitHub

Update lists to include or exclude instances based on set logic.

realTime( baseConnection )

Overwrites the "data callback" methods and provides createInstance, updateInstance, and destroyInstance methods that update lists to include or exclude a created, updated, or destroyed instance.

An instance is put in a list if it is a set.subset of the listSet. The item is inserted using index.

Use

To use real-time, create a connection with its dependent behaviors like:

var todoConnection = connect(
   ["real-time",
    "constructor",
    "constructor-store",
    "constructor-callbacks-once",
    "data-url"],{
  url: "/todos"
});

Next, use the connection to load lists and save those lists in the store:

todoConnection.getList({complete: false}).then(function(todos){
  todoConnection.addListReference(todos);
})

Finally, use one of the createInstance, updateInstance, and destroyInstance methods to tell the connection that data has changed. The connection will update (by calling splice) each list accordingly.

Example

The following demo shows two lists that use this connection. The "Run Code" button sends the connection data changes which the connection will then update lists accordingly:

This example creates a todoList function and todoItem function that manage the behavior of a list of todos and a single todo respectfully. It uses Object.observe to observe changes in the todo list and individual todo data. Other frameworks will typically provide their own observable system.

todoList

When todoList is created, it is passed the set of data to load. It uses this to get todos from the todoConnection like:

todosConnection.getList(set).then(function(retrievedTodos){

It then adds those todos to the listStore so they can be updated automatically. And, it listens to changes in todos and calls an update function:

todosConnection.addListReference(todos);
Object.observe(todos, update, ["add", "update", "delete"] );

The update function is able to inserted new todoItems in the page when items are added to or removed from todos. We exploit that by calling update as if it just added each todo in the list:

update(todos.map(function(todo, i){
  return {
    type: "add",
    name: ""+i
  };
}));

todoItem

The todoItem creates an element that updates with changes in its todo. It listens to changes in the todo and saves the todo in the instanceStore with the following:

Object.observe(todo, update, ["add", "update", "delete"] );
todosConnection.addInstanceReference(todo);

A todoItem needs to be able to stop listening on the todo and remove itself from the instanceStore if the todo is removed from the page. To provide this teardown functionality, todoItem listens to a "removed" event on its element and unobserves the todo and removes it from the instanceStore:

$(li).bind("removed", function(){
  Object.unobserve(todo, update, ["add", "update", "delete"] );
  todosConnection.deleteInstanceReference(todo);
});

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

On this page

Get help

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