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
      • 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
        • Examples
          • input[type=checkbox]
          • input[type=radio]
          • select
          • select[multiple]
        • Converters
          • boolean-to-inList
          • either-or
          • equal
          • index-to-selected
          • not
          • selected-to-index
          • string-to-any
      • 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

either-or

  • Edit on GitHub

A converter that two-way binds to a checkbox two values provided as arguments. This converter is useful when you have a binary decision between two fixed values.

either-or(~chosen, a, b)

When the getter is called, gets the value of the chosen compute and if it is equal to a, returns true, otherwise it returns false.

When the setter is called, if the new value is truthy, sets the chosen can-compute to a’s value, otherwise sets it to b’s value.

<span>Favorite superhero:</span>
<input type="checkbox" checked:bind="either-or(~chosen, 'Batman', 'Superman')"> Batman?

Parameters

  1. chosen {can-compute}:

    A compute where the chosen value (between a and b is stored). When the setter is called, this compute’s value will be updated.

  2. a {*}:

    The true value. If the checkbox is checked, then a’s value will be stored in the chosen compute.

  3. b {*}:

    The false value. If the checkbox is unchecked, then b’s value will be stored in the chosen compute.

Returns

{can-compute}:

A compute that will be used by can-stache-bindings as a getter/setter bound to the element or a component's viewModel.

Use

either-or is made to be used with <input type=checkbox> elements when there is a binary decision that can be made (so that multiple radio buttons are not needed).

You pass 3 arguments to this converter. The first argument is a compute that represents the chosen value. The second argument is the default, truthy, value. And the third argument is the falsey value.

<p>
    <input type="checkbox"
        checked:bind="either-or(~pref, 'Star Trek', 'Star Wars')" />
    <span>Star Trek</span>
</p>

<p>Your fandom: {{pref}}</p>
var template = stache.from("demo-template");

var fan = new DefineMap({
    pref: "Star Trek"
});

document.body.appendChild(template(fan));

// User unchecks the checkbox
fan.pref === "Star Wars";

// Changing the value in code:
fan.pref === "Star Trek";

// Checkbox is now checked again.

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