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
        • behaviors
          • ./base/
          • ./cache-requests/
          • ./can/constructor-hydrate/
          • ./can/map/
          • ./can/ref/
          • ./can/session/
          • ./can-local-store
          • ./can-memory-store
          • ./constructor/callbacks-once/
          • ./constructor/
            • behavior options
              • instance
              • list
            • CRUD methods
              • destroy
              • get
              • getList
              • save
            • CRUD callbacks
              • createdInstance
              • destroyedInstance
              • updatedInstance
              • updatedList
            • hydrators
              • hydrateInstance
              • hydrateList
            • serializers
              • serializeInstance
              • serializeList
            • helpers
              • cidStore
              • isNew
          • ./constructor/store/
          • ./data/callbacks/
          • ./data/callbacks-cache/
          • ./data/combine-requests/
          • ./data/parse/
          • ./data/url/
          • ./data/worker/
          • ./fall-through-cache/
          • ./real-time/
        • modules
          • ./can/tag/
          • ./helpers/map-deep-merge
          • ./helpers/weak-reference-map
        • data types
          • DataInterface
          • Instance
          • InstanceInterface
          • List
          • ListData
        • deprecated
          • ./can/base-map/
          • ./can/merge/
          • ./can/super-map/
          • ./data/localstorage-cache/
          • ./data/memory-cache/
      • 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

save

  • Edit on GitHub

Create or update an instance on the connection data source

connection.save( instance )

First checks if the instance has an id or not. If it has an id, the instance will be updated; otherwise, it will be created.

When creating an instance, the instance is added to the cidStore, and its serialized data is passed to createData. If createData's promise resolves to anything other than undefined, createdInstance is called with that data.

When updating an instance, its serialized data is passed to updateData. If updateData's promise resolves to anything other than undefined, updatedInstance is called with that data.

Parameters

  1. instance {Instance}:

    the instance to create or save

Returns

{Promise<Instance>}:

Promise resolving to the same instance that was passed to save

Use

To use save to create an instance, create a connection, then an instance, and call .save() on it:

// Create a connection
var constructor = require('can-connect/constructor/');
var dataUrl = require('can-connect/data/url/');
var todoConnection = connect([dataUrl, constructor], {
  url: "/todos"
});

// Create an instance
var todo = {name: "do dishes"};

// Call .save()
todoConnection.save(todo)

.save(todo) above will call createData on the data/url behavior, which will make an HTTP POST request to /todos with the serialized todo data. The server response data may look something like:

{
 id: 5,
 ownerId: 9
}

That data will be passed to createdInstance which by default adds those properties to todo, resulting in todo looking like:

{
 name: "do dishes",
 id: 5,
 ownerId: 9
}

As an example of updating an instance, change a property on todo and call .save() again:

// Change a property
todo.name = "Do dishes now!!";

// Call .save()
todoConnection.save(todo)

The .save(todo) above will call updateData on the data/url behavior, which will make an HTTP PUT request to /todos with the serialized todo data.

A successful server response body should look something like:

{
 name: "Do dishes now!!",
 id: 5,
 ownerId: 9
}

This data will be passed to updatedInstance which by default sets all of todo's properties to look like the response data, even removing properties that are missing from the response data.

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