2014-11-06 19:27:28 +03:00
|
|
|
---
|
|
|
|
layout: default
|
|
|
|
title: Select2 4.0.0 Released
|
|
|
|
slug: announcements-4.0
|
|
|
|
---
|
|
|
|
|
|
|
|
<div class="container">
|
|
|
|
<section id="pre-release">
|
2014-11-26 03:42:53 +03:00
|
|
|
<h1>Pre-release notes</h1>
|
2014-11-06 19:27:28 +03:00
|
|
|
|
2014-11-26 03:42:53 +03:00
|
|
|
<hr />
|
|
|
|
|
|
|
|
<p class="lead">
|
2014-11-06 19:27:28 +03:00
|
|
|
The 4.0 release is ready for early adopters interested in testing it out.
|
|
|
|
You can use the development version, available on GitHub, by getting the
|
|
|
|
source code available in the <code>select2-ng</code> branch. The source
|
|
|
|
code can be
|
|
|
|
<a href="https://github.com/ivaynberg/select2/archive/select2-ng.zip">
|
|
|
|
downloaded as a <code>zip</code> archive
|
|
|
|
</a> as well.
|
|
|
|
</p>
|
|
|
|
</section>
|
|
|
|
|
2014-11-26 03:42:53 +03:00
|
|
|
<hr />
|
|
|
|
|
2014-11-06 19:27:28 +03:00
|
|
|
<section id="release">
|
|
|
|
<h1>Select2 4.0.0</h1>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
The 4.0 release of Select2 is the result of three years of working on the
|
|
|
|
code base and watching where it needs to go. At the core, it is a full
|
|
|
|
rewrite that addresses many of the extensibility and usability problems
|
|
|
|
that could not be addressed in previous versions.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
This release contains many breaking changes, but easy-upgrade pathes have
|
|
|
|
been created as well as helper modules that will allow for backwards
|
|
|
|
compatibility to be maintained with past versions of Select2. Upgrading
|
|
|
|
<em>will</em> require you to read the release notes carefully, but the
|
|
|
|
migration path should be relatively straightforward. You can find more
|
|
|
|
information on the modules that have been created to make upgrading easier
|
2014-12-11 06:31:07 +03:00
|
|
|
by looking through <a href="release-notes.html">the release notes</a>.
|
2014-11-06 19:27:28 +03:00
|
|
|
</p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Below is an in-depth review of what is new in Select2, as well as some of
|
|
|
|
the major changes that have been made.
|
|
|
|
</p>
|
|
|
|
</section>
|
|
|
|
|
2014-11-26 03:42:53 +03:00
|
|
|
<section id="new">
|
|
|
|
<h2>New features</h2>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
The notable features of this new release include:
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
<li>
|
|
|
|
A more flexible plugin framework that allows you to override Select2 to
|
|
|
|
behave exactly how you want it to.
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
Consistency with standard <code><select></code> elements for all
|
|
|
|
data adapters, removing the need for hidden <code><input></code>
|
|
|
|
elements.
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
A new build system that uses AMD to keep everything organized.
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
Less specific selectors allowing for Select2 to be styled to fit the
|
|
|
|
rest of your application.
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</section>
|
|
|
|
|
2014-11-06 19:27:28 +03:00
|
|
|
<section id="plugins">
|
2014-12-11 06:31:07 +03:00
|
|
|
<h2>Plugin system</h2>
|
2014-11-06 19:27:28 +03:00
|
|
|
|
|
|
|
<p>
|
|
|
|
Select2 now provides interfaces that allow for it to be easily extended,
|
|
|
|
allowing for anyone to create a plugin that changes the way Select2 works.
|
|
|
|
This is the result of Select2 being broken into four distinct sections,
|
|
|
|
each of which can be extended and used together to create your unique
|
|
|
|
Select2.
|
|
|
|
</p>
|
|
|
|
|
2014-12-11 06:31:07 +03:00
|
|
|
<p>
|
|
|
|
The adapters implement a consistent interface that is documented in the
|
|
|
|
<a href="options.html#adapters">options section for adapters</a>, allowing
|
|
|
|
you to customize Select2 to do exactly what you are looking for. Select2
|
|
|
|
is designed such that you can mix and match plugins, with most of the core
|
|
|
|
options being built as decorators that wrap the standard adapters.
|
|
|
|
</p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section id="amd-builds">
|
|
|
|
<h2>AMD-based build system</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section id="migrating">
|
|
|
|
<h1>Migrating from Select2 3.5</h1>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
There are a few breaking changes that migrators should be aware of when
|
|
|
|
they are coming from older versions of Select2.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<h2 id="hidden-input">No more hidden input tags</h2>
|
2014-11-06 19:27:28 +03:00
|
|
|
|
|
|
|
<p>
|
2014-12-11 06:31:07 +03:00
|
|
|
In past versions of Select2, an <code><input type="hidden" /></code>
|
|
|
|
tag was recommended if you wanted to do anything advanced with Select2,
|
|
|
|
such as work with remote data sources or allow users to add their own
|
|
|
|
tags. This had the unfortunate side-effect of servers not receiving the
|
|
|
|
data from Select2 as an array, like a standard <code><select></code>
|
|
|
|
element does, but instead sending a string containing the comma-separated
|
|
|
|
strings. The code base ended up being littered with special cases for the
|
|
|
|
hidden input, and libraries using Select2 had to work around the
|
|
|
|
differences it caused.
|
2014-11-06 19:27:28 +03:00
|
|
|
</p>
|
|
|
|
|
2014-12-11 06:31:07 +03:00
|
|
|
<p>
|
|
|
|
In Select2 4.0, the <code><select></code> element supports all core
|
|
|
|
options, and support for the old
|
|
|
|
<code><input type="hidden" /></code> has been removed. This means
|
|
|
|
that if you previously declared an AJAX field with some pre-selected
|
|
|
|
options that looked like...
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<pre class="prettyprint linenums">
|
|
|
|
<input type="hidden" name="select-boxes" value="1,2,4,6" />
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Will need to be recreated as a <code><select></code> element with
|
|
|
|
some <code><option></code> tags that have <code>value</code>
|
|
|
|
attributes that match the old value.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<pre class="prettyprint linenums">
|
|
|
|
<select name="select-boxes" multiple="multiple">
|
|
|
|
<option value="1" selected="selected">Select2</option>
|
|
|
|
<option value="2" selected="selected">Chosen</option>
|
|
|
|
<option value="4" selected="selected">selectize.js</option>
|
|
|
|
<option value="6" selected="selected">typeahead.js</option>
|
|
|
|
</select>
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
The options that you create should have <code>selected="selected"</code>
|
|
|
|
set, so Select2 and the browser knows that they should be selected. The
|
|
|
|
<code>value</code> attribute of the option should also be set to the value
|
|
|
|
that will be returned from the server for the result, so Select2 can
|
|
|
|
highlight it as selected in the dropdown. The text within the option
|
|
|
|
should also reflect the value that should be displayed by default for the
|
|
|
|
option.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<h2 id="new-matcher">Advanced matching of searches</h2>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
In past versions of Select2, when matching search terms to individual
|
|
|
|
options, which limited the control that you had when displaying results,
|
|
|
|
especially in cases where there was nested data. The <code>matcher</code>
|
|
|
|
function was only given the individual option, even if it was a nested
|
|
|
|
options, without any context.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
With the new matcher function, only the root-level options are matched and
|
|
|
|
matchers are expected to limit the results of any children options that
|
|
|
|
they contain. This allows developers to customize how options within
|
|
|
|
groups can be displayed, and modify how the results are returned.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
A function has been created that allows old-style matcher functions to be
|
|
|
|
converted to the new style. You can retrieve the function from the
|
|
|
|
<code>select2/compat/matcher</code> module.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<h2 id="flexible-placeholders">More flexible placeholders</h2>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
In the most recent versions of Select2, placeholders could only be
|
|
|
|
applied to the first (typically the default) option in a
|
|
|
|
<code><select></code> if it was blank. The
|
|
|
|
<code>placeholderOption</code> option was added to Select2 to allow users
|
|
|
|
using the <code>select</code> tag to select a different option, typically
|
|
|
|
an automatically generated option with a different value.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
The <code>placeholder</code> option can now take an object as well as just
|
|
|
|
a string. This replaces the need for the old
|
|
|
|
<code>placeholderOption</code>, as now the <code>id</code> of the object
|
|
|
|
can be set to the <code>value</code> attribute of the
|
|
|
|
<code><option></code> tag.
|
|
|
|
</p>
|
2014-11-06 19:27:28 +03:00
|
|
|
|
|
|
|
<p>
|
2014-12-11 06:31:07 +03:00
|
|
|
For a select that looks like the following, where the first option (with a
|
|
|
|
value of <code>-1</code>) is the placeholder option...
|
2014-11-06 19:27:28 +03:00
|
|
|
</p>
|
|
|
|
|
2014-12-11 06:31:07 +03:00
|
|
|
<pre class="prettyprint linenums">
|
|
|
|
<select>
|
|
|
|
<option value="-1" selected="selected">Select an option</option>
|
|
|
|
<option value="1">Something else</option>
|
|
|
|
</select>
|
|
|
|
</pre>
|
2014-11-06 19:27:28 +03:00
|
|
|
|
|
|
|
<p>
|
2014-12-11 06:31:07 +03:00
|
|
|
You would have previously had to get the placeholder option through the
|
|
|
|
<code>placeholderOption</code>, but now you can do it through the
|
|
|
|
<code>placeholder</code> option by setting an <code>id</code>.
|
2014-11-06 19:27:28 +03:00
|
|
|
</p>
|
|
|
|
|
2014-12-11 06:31:07 +03:00
|
|
|
<pre class="prettyprint linenums">
|
|
|
|
$("select").select2({
|
|
|
|
placeholder: {
|
|
|
|
id: "-1",
|
|
|
|
placeholder: "Select an option"
|
|
|
|
}
|
|
|
|
})
|
|
|
|
</pre>
|
2014-11-06 19:27:28 +03:00
|
|
|
|
|
|
|
<p>
|
2014-12-11 06:31:07 +03:00
|
|
|
And Select2 will automatically display the placeholder when the value of
|
|
|
|
the select is <code>-1</code>, which it is by default. This does not break
|
|
|
|
the old functionality of Select2 where the placeholder option was blank by
|
|
|
|
default.
|
2014-11-06 19:27:28 +03:00
|
|
|
</p>
|
|
|
|
</section>
|
|
|
|
</div>
|