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
      • 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
        • Changelog
        • Core
        • Map Plugin
        • Shims
          • validatejs-shim
      • 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

Shims

  • Edit on GitHub

Shims allow the flexibility of using any validation library with can.validate. Creating a shim requires just three methods, isValid, once, and validate. The shim should also import the validation library itself. The shim then registers itself with can.validate and passes the methods object.

Available Shims

The original validations plugin for CanJS included a basic validation library, it was ported over to can-validate as it's own library and can be used with can-validate using it's shim.

There is also a shim for the popular library ValidateJS.

More libraries/shims may be added in the future but it is very easy to create a shim for any library in your project.

Creating your own shim

Start by extending can.Construct.

var Shim = can.Construct.extend({});

You'll need can and your library, so let's add them...

import can from 'can';
import myLibrary from 'awesomeLibrary';

var Shim = can.Construct.extend({});

We might as well register the shim now...

import can from 'can';
import myLibrary from 'awesomeLibrary';

var Shim = can.Construct.extend({});

can.validate.register('myLibrary', Shim);

Sweet. Looks good so far. Now let's add the meat.

import can from 'can';
import myLibrary from 'awesomeLibrary';

var Shim = can.Construct.extend({
    isValid: function (value, options, name) {
        return;
    },
    once: function (value, options) {
        return;
    },
    validate: function (values, options) {
        return;
    }
});

can.validate.register('myLibrary', Shim);

This is all that is required. Not a lot of validation going on but the rest depends on how your validation library works.

You may need to process the options or values a bit. You might even need to make sure the errors object is correct.

Remember, these methods should return undefined if no errors occurred. Otherwise, they should return an array of errors.

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