Added correct handling of namespaces for the getValues function

This commit is contained in:
Andreas Stöckel 2011-08-12 17:02:21 +00:00
parent 2fc29718f1
commit 0c71ee3931
5 changed files with 74 additions and 24 deletions

View File

@ -40,5 +40,5 @@ var et2_box = et2_baseWidget.extend({
}); });
et2_register_widget(et2_box, ["hbox", "vbox"]); et2_register_widget(et2_box, ["hbox", "vbox", "box"]);

View File

@ -64,6 +64,32 @@ et2_contentArrayMgr.prototype.getValueForID = function(_id)
return null; return null;
} }
/**
* Returns the path to this content array manager perspective as an array
* containing the key values
*
* @param _path is used internally, do not supply it manually.
*/
et2_contentArrayMgr.prototype.getPath = function(_path)
{
if (typeof _path == "undefined")
{
_path = [];
}
if (this.perspectiveData.key != null)
{
_path.push(this.perspectiveData.key);
}
if (this.parentMgr != null)
{
this.parentMgr.getPath(_path);
}
return _path;
}
/** /**
* Get array entry is the equivalent to the boetemplate get_array function. * Get array entry is the equivalent to the boetemplate get_array function.
* It returns a reference to the (sub) array with the given key. This also works * It returns a reference to the (sub) array with the given key. This also works
@ -201,7 +227,7 @@ et2_contentArrayMgr.prototype.openPerspective = function(_owner, _root, _col, _r
// Set the root key // Set the root key
if (typeof _root == "string") if (typeof _root == "string")
{ {
mgr.perspectiveData.key == _root; mgr.perspectiveData.key = _root;
} }
// Set the _col and _row parameter // Set the _col and _row parameter

View File

@ -477,34 +477,52 @@ var et2_widget = Class.extend({
* Fetches all input element values and returns them in an associative * Fetches all input element values and returns them in an associative
* array. Widgets which introduce namespacing can use the internal _target * array. Widgets which introduce namespacing can use the internal _target
* parameter to add another layer. * parameter to add another layer.
*
* @param _target is used internally and should no be supplied.
*/ */
getValues: function(_target) { getValues: function() {
if (typeof _target == "undefined") var result = {};
{
_target = {};
}
// Add the value of this element to the result object // Iterate over the widget tree
if (this.implements(et2_IInput)) this.iterateOver(function(_widget) {
{
if (typeof _target[this.id] != "undefined") // Get the path to the node we have to store the value at
var path = _widget.getContentMgr().getPath();
// Set the _target variable to that node
var _target = result;
for (var i = 0; i < path.length; i++)
{
// Create a new object for not-existing path nodes
if (typeof _target[path[i]] == "undefined")
{
_target[path[i]] = {};
}
// Check whether the path node is really an object
if (_target[path[i]] instanceof Object)
{
_target = _target[path[i]];
}
else
{
et2_debug("error", "ID collision while writing at path " +
"node '" + path[i] + "'");
}
}
// Check whether the entry is really undefined
if (typeof _target[_widget.id] != "undefined")
{ {
et2_debug("error", "Overwriting value of '" + this.id + et2_debug("error", "Overwriting value of '" + this.id +
"', id exists twice!"); "', id exists twice!");
} }
_target[this.id] = this.getValue(); // Store the value of the widget and reset its dirty flag,
} _target[_widget.id] = _widget.getValue();
_widget.resetDirty();
// Store the values of the children in the target array }, this, et2_IInput);
for (var i = 0; i < this._children.length; i++)
{
this._children[i].getValues(_target);
}
return _target; return result;
}, },
/** /**

View File

@ -1,7 +1,9 @@
var expression_test_data = { var expression_test_data = {
"test": { "test": {
"display_text": "true" "display_text": "true",
"textbox": "And this is the inner textbox."
}, },
"display_text": "false" "display_text": "false",
"textbox": "This is the outer textbox."
}; };

View File

@ -1,6 +1,10 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<overlay> <overlay>
<template id="test"> <template id="test">
<description disabled="!@display_text" value="Dies ist nur ein test!" /> <vbox>
<description disabled="!@display_text" value="Dies ist nur ein test!" />
<textbox id="textbox" />
</vbox>
</template> </template>
<textbox id="textbox" />
</overlay> </overlay>