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/
            • behavior options
              • List
              • Map
            • map static methods
              • get
              • getList
            • map instance methods
              • destroy
              • isDestroying
              • isNew
              • isSaving
              • save
            • hydrators
              • instance
              • list
            • serializers
              • serializeInstance
              • serializeList
            • identifiers
              • id
            • instance callbacks
              • createdInstance
              • destroyedInstance
              • updatedInstance
              • updatedList
            • behavior static methods
              • callbackInstanceEvents
          • ./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/
        • 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

can/map

  • Edit on GitHub

Integrate a can-connect connection with a DefineMap type.

canMap( baseConnection )

Extends the functionality of the constructor behavior so it integrates tightly with DefineMap and DefineList types:

  • adds methods to read, destroy, create and update instances (via the connection) to the Map type
  • adds observable values to instances indicating if they are being saved, deleted or have not yet been saved
  • updates instances with the data from the response bodies of create, update and delete requests
  • triggers events on the Map type and instances when instances are created, destroyed or updated

Parameters

  1. baseConnection {Object}:

    can-connect connection object that is having the can/map behavior added on to it. Expects the constructor behavior to already be added to this base connection. If the connect helper is used to build the connection, the behaviors will automatically be ordered as required.

Returns

{Object}:

a can-connect connection containing the methods provided by can/map.

Use

The can/map behavior links a connection to a DefineMap and DefineList type. The connection will create those types of instances from the data it receives. It also adds convenient methods and observable values to the Map that offer connection functionality (e.g instance.save) and the status of the instance (e.g instance.isSaving).

To use the can/map behavior, first create a Map and List constructor function:

var Todo = DefineMap.extend({
  allowComplete: function(ownerId) {
    return this.ownerId === ownerId;
  }
});

var TodoList = DefineList.extend({
  "#": Todo,
  incomplete: function(){
    return this.filter({complete: false});
  }
});

Next, pass the Map and List constructor functions to connect as options. The following creates connects the Todo and TodoList types to a RESTful data service via the connection:

var connect = require("can-connect");
var dataUrl = require("can-connect/data/url/url"),
var constructor = require("can-connect/constructor/constructor"),
var canMap = require("can-connect/can/map/map")

var todoConnection = connect([dataUrl, constructor, canMap],{
  Map: Todo,
  List: TodoList,
  url: "/services/todos"
});

The connection itself can be used to create, read, update & delete Todo and TodoLists:

todoConnection.getList({}).then(function(todos){
  var incomplete = todos.incomplete();
  incomplete[0].allowComplete( 5 ) //-> true
});

... or instead of how it's done above, because can/map adds methods to the Map type, you can use Todo to retrieve Todo and TodoLists:

Todo.getList({}).then(function(todos){ ... });
Todo.get({}).then(function(todo){ ... });

You can also create, update, and destroy Todo instances. Notice that save is used to create and update:

// create an instance
new Todo({name: "dishes"}).save().then(function(todo){
  todo.set({
    name: "Do the dishes"
  })
  .save() // update an instance
  .then(function(todo){
    todo.destroy(); // destroy an instance
  });
});

There's also methods that let you know if an instance is in the process of being saved or destroyed:

var savePromise = new Todo({name: "dishes"}).save();
todo.isSaving() //-> true

savePromise.then(function(){
    todo.isSaving() //-> false

    var destroyPromise = todo.destroy();    
    todo.isDestroying() //-> true

    destroyPromise.then(function(){
        todo.isDestroying() //-> false
    })
})

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