Selectbox widget now doesn't use actual widgets for the transmitted options - for lists like the country selection, this created a huge slowdown while page creation.

This commit is contained in:
Andreas Stöckel 2011-08-31 16:58:44 +00:00
parent 0dea78ab2e
commit 54cf0cbf26

View File

@ -55,8 +55,8 @@ var et2_selectbox = et2_inputWidget.extend({
init: function() { init: function() {
this._super.apply(this, arguments); this._super.apply(this, arguments);
// Only allow options inside this element // Allow no other widgets inside this one
this.supportedWidgetClasses = [et2_option]; this.supportedWidgetClasses = [];
// Legacy options could have row count or empty label in first slot // Legacy options could have row count or empty label in first slot
if(typeof this.options.rows == "string" && isNaN(this.options.rows)) { if(typeof this.options.rows == "string" && isNaN(this.options.rows)) {
@ -94,11 +94,17 @@ var et2_selectbox = et2_inputWidget.extend({
} }
}, },
_appendOptionElement: function(_value, _label) { _appendOptionElement: function(_value, _label, _title) {
$j(document.createElement("option")) var option = $j(document.createElement("option"))
.attr("value", _value) .attr("value", _value)
.text(_label) .text(_label);
.appendTo(this.input);
if (typeof _title != "undefined" && _title)
{
option.attr("title", _title);
}
option.appendTo(this.input);
}, },
createInputWidget: function() { createInputWidget: function() {
@ -123,6 +129,19 @@ var et2_selectbox = et2_inputWidget.extend({
} }
}, },
loadFromXML: function(_node) {
// Read the option-tags
var options = et2_directChildrenByTagName(_node, "options");
for (var i = 0; i < options.length; i++)
{
this._appendOptionElement(
et2_readAttrWithDefault(options[i], "value", options[i].textContent),
options[i].textContent,
et2_readAttrWithDefault(options[i], "title", "")
);
}
},
/** /**
* The set_select_optons function is added, as the select options have to be * The set_select_optons function is added, as the select options have to be
* added after the "option"-widgets were added to selectbox. * added after the "option"-widgets were added to selectbox.
@ -140,16 +159,14 @@ var et2_selectbox = et2_inputWidget.extend({
if (_options[key] instanceof Object) if (_options[key] instanceof Object)
{ {
attrs["label"] = _options[key]["label"] ? _options[key]["label"] : ""; this._appendOptionElement(key,
attrs["statustext"] = _options[key]["title"] ? _options[key]["title"] : ""; _options[key]["label"] ? _options[key]["label"] : "",
_options[key]["title"] ? _options[key]["title"] : "");
} }
else else
{ {
attrs["label"] = _options[key] this._appendOptionElement(key, _options[key]);
} }
// Create the widget and add it as a child
et2_createWidget("option", attrs, this);
} }
} }
}); });
@ -225,7 +242,7 @@ et2_register_widget(et2_selectbox_ro, ["menupopup_ro", "listbox_ro", "select-cat
/** /**
* Widget class which represents a single option inside a selectbox * Widget class which represents a single option inside a selectbox
*/ */
var et2_option = et2_baseWidget.extend({ /*var et2_option = et2_baseWidget.extend({
attributes: { attributes: {
"value": { "value": {
@ -284,9 +301,9 @@ var et2_option = et2_baseWidget.extend({
this.option.attr("title", _value); this.option.attr("title", _value);
}*/ }*/
}); //});*/
et2_register_widget(et2_option, ["option"]); //et2_register_widget(et2_option, ["option"]);
/** /**