ampersand-multiselect-view v0.0.7
ampersand-multiselect-view
Lead Maintainer: Kyle Farris (@kylefarris)
overview
A view module for intelligently rendering and validating selectbox input. Works well with ampersand-form-view. Based off of ampersand-select-view.
install
npm install ampersand-multiselect-viewPart of the Ampersand.js toolkit for building clientside applications.
API Reference
clear() - Function - returns this
Alias to calling setValue(null, true). Unselects all options.
reset() - Function - returns this
Sets the selected option and view value to the original option value provided during construction.
setValue(value, skipValidationMessage) - Function - returns this
Sets the selected options to those which match the provided value(s). Updates the view's .value accordingly. MultiSelectView will error if no matching options exist.
constructor - Function new MultiSelectView([options])
options
general options
autoRender: default:falsegenerally, we leave rendering of this FieldView to its controlling formname: the<select>'snameattribute's value. Used when reporting to parent formparent: parent form referenceoptions: array/collection of options to render into the select box[el]: element if you want to render the view into[template]: a custom template to use (see 'template' section, below, for more)[required]: default:falsefield required[eagerValidate]: default:falsevalidate and show messages immediately. Note: field will be validated immediately to provide a true.validvalue, but messages by default are hidden.[value]: initial value(s) (array) for the<select>.valuemust be a members of theoptionsset.
label & validation options
[label]: default:namevalue text to annotate your select control[invalidClass]: default:'select-invalid'class to apply to root element if invalid[validClass]: default:'select-valid'class to apply to root element if valid[requiredMessage]: default:'Selection required'message to display if invalid and required
collection option set
If using a collection to produce <select> <option>s, the following may also be specified:
[disabledAttribute]: boolean model attribute to flag disabling of the option node[idAttribute]: model attribute to use as the id for the option node. This will be returned bySelectView.prototype.value[textAttribute]: model attribute to use as the text of the option node in the select box[yieldModel]: default:trueif options is a collection, yields the full model rather than just itsidAttributeto.value
When the collection changes, the view will try and maintain its currently .value. If the corresponding model is removed, the <select> control will default to the 0th index <option> and update its value accordingly.
custom template
You may override the default template by providing your own template string to the constructor options hash. Technically, all you must provided is a <select> element. However, your template may include the following under a single root element:
- An element with a
data-hook="label"to annotate your select control - An
<select>element to hold youroptionswith themultipleormultiple="multiple"attribute. - An element with a
data-hook="message-container"to contain validation messages - An element with a
data-hook="message-text"nested beneath thedata-hook="message-container"element to show validation messages
Here's the default template for reference:
<label class="select">
<span data-hook="label"></span>
<select multiple="multiple"></select>
<span data-hook="message-container" class="message message-below message-error">
<p data-hook="message-text"></p>
</span>
</label>example
var FormView = require('ampersand-form-view');
var MultiSelectView = require('ampersand-multiselect-view');
module.exports = FormView.extend({
fields: function () {
return [
new MultiSelectView({
label: 'Pick some colors!',
// actual field name
name: 'color',
parent: this,
// you can pass simple string options
options: ['blue', 'orange', 'red'],
// you can specify that they have to pick at least one
required: true
}),
new MultiSelectView({
name: 'option',
parent: this,
// you can also pass array, first is the value, second is used for the label
// and an optional third value can used to disable the option
options: [ ['a', 'Option A'], ['b', 'Option B'], ['c', 'Option C', true] ]
}),
new MultiSelectView({
name: 'model',
parent: this,
// you can pass in a collection here too
options: collection,
// and pick some item from the collection as the selected ones
value: [collection1.at(2), collection1.at(5)],
// here you specify which attribute on the objects in the collection
// to use for the value returned.
idAttribute: 'id',
// you can also specify which model attribute to use as the title
textAttribute: 'title',
// you can also specify a boolean model attribute to render items as disabled
disabledAttribute: 'disabled',
// here you can specify if it should return the selected model(s) from the
// collection, or just the id attribute(s). defaults `true`
yieldModel: false
})
];
}
});browser support
changelog
- We're still on the beta version!
credits
Based considerably off of the ampersand-select-view by Christopher Dieringer (@cdaringe).
contributing
Do it. This is still experimental--I can use all the help I can get!
license
MIT