DoneJS StealJS jQuery ++ FuncUnit DocumentJS
3.0.0
2.3.27

 

  • Github
  • Twitter
  • Chat
  • Forum
  • Guides
  • Core
    • can-component
    • can-compute
    • can-connect
      • behaviors
        • ./base/
        • ./cache-requests/
        • ./can/map/
        • ./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/weak-reference-map
      • data types
        • DataInterface
        • Instance
        • InstanceInterface
        • List
        • ListData
    • can-define
    • can-define/list/list
    • can-define/map/map
    • can-route
    • can-route-pushstate
    • can-set
    • can-stache
    • can-stache/helpers/route
    • can-stache-bindings
  • Ecosystem
  • Infrastructure
  • Legacy
  • Bitovi
    • Bitovi.com
    • Blog
    • Consulting
    • Training
    • Open Source
  • Chat
  • Forum
  • Star
  • Follow @canjs
  • CanJS
  • /
  • Core
  • /
  • can-connect
  • /
  • ./real-time/
  • / On this page
    • can-connect/real-time/real-time

      module

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

      • source

      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.0.0.