__init__(value, choices, options) {
		if (typeof(choices) != 'object')
			choices = {};

		if (!Array.isArray(value))
			this.values = (value != null && value != '') ? [ value ] : [];
		else
			this.values = value;

		this.choices = choices;
		this.options = Object.assign({
			sort:               true,
			multiple:           Array.isArray(value),
			optional:           true,
			select_placeholder: _('-- Please choose --'),
			custom_placeholder: _('-- custom --'),
			display_items:      3,
			dropdown_items:     -1,
			create:             false,
			create_query:       '.create-item-input',
			create_template:    'script[type="item-template"]'
		}, options);
	}
In addition to the [AbstractElement.InitOptions]{@link LuCI.ui.AbstractElement.InitOptions}
the following properties are recognized:

@typedef {LuCI.ui.AbstractElement.InitOptions} InitOptions
@memberof LuCI.ui.Dropdown

@property {boolean} [optional=true]
Specifies whether the dropdown selection is optional. In contrast to
other widgets, the `optional` constraint of dropdowns works differently;
instead of marking the widget invalid on empty values when set to `false`,
the user is not allowed to deselect all choices.

For single value dropdowns that means that no empty "please select"
choice is offered and for multi value dropdowns, the last selected choice
may not be deselected without selecting another choice first.

@property {boolean} [multiple]
Specifies whether multiple choice values may be selected. It defaults
to `true` when an array is passed as input value to the constructor.

@property {boolean|string[]} [sort=false]
Specifies if and how to sort choice values. If set to `true`, the choice
values will be sorted alphabetically. If set to an array of strings, the
choice sort order is derived from the array.

@property {string} [select_placeholder=-- Please choose --]
Specifies a placeholder text which is displayed when no choice is
selected yet.

@property {string} [custom_placeholder=-- custom --]
Specifies a placeholder text which is displayed in the text input
field allowing to enter custom choice values. Only applicable if the
`create` option is set to `true`.

@property {boolean} [create=false]
Specifies whether custom choices may be entered into the dropdown
widget.

@property {string} [create_query=.create-item-input]
Specifies a CSS selector expression used to find the input element
which is used to enter custom choice values. This should not normally
be used except by widgets derived from the Dropdown class.

@property {string} [create_template=script[type="item-template"]]
Specifies a CSS selector expression used to find an HTML element
serving as template for newly added custom choice values.

Any `{{value}}` placeholder string within the template elements text
content will be replaced by the user supplied choice value, the
resulting string is parsed as HTML and appended to the end of the
choice list. The template markup may specify one HTML element with a
`data-label-placeholder` attribute which is replaced by a matching
label value from the `choices` object or with the user supplied value
itself in case `choices` contains no matching choice label.

If the template element is not found or if no `create_template` selector
expression is specified, the default markup for newly created elements is
`<li data-value="{{value}}"><span data-label-placeholder="true" /></li>`.

@property {string} [create_markup]
This property allows specifying the markup for custom choices directly
instead of referring to a template element through CSS selectors.

Apart from that it works exactly like `create_template`.

@property {number} [display_items=3]
Specifies the maximum amount of choice labels that should be shown in
collapsed dropdown state before further selected choices are cut off.

Only applicable when `multiple` is `true`.

@property {number} [dropdown_items=-1]
Specifies the maximum amount of choices that should be shown when the
dropdown is open. If the amount of available choices exceeds this number,
the dropdown area must be scrolled to reach further items.

If set to `-1`, the dropdown menu will attempt to show all choice values
and only resort to scrolling if the amount of choices exceeds the available
screen space above and below the dropdown widget.

@property {string} [placeholder]
This property serves as a shortcut to set both `select_placeholder` and
`custom_placeholder`. Either of these properties will fallback to
`placeholder` if not specified.

@property {boolean} [readonly=false]
Specifies whether the custom choice input field should be rendered
readonly. Only applicable when `create` is `true`.

@property {number} [maxlength]
Specifies the HTML `maxlength` attribute to set on the custom choice
`<input>` element. Note that this a legacy property that exists for
compatibility reasons. It is usually better to `maxlength(N)` validation
expression. Only applicable when `create` is `true`.