144 lines
4.1 KiB
JavaScript
144 lines
4.1 KiB
JavaScript
|
if(!dojo._hasResource["dojox.wire.ml.Data"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
||
|
dojo._hasResource["dojox.wire.ml.Data"] = true;
|
||
|
dojo.provide("dojox.wire.ml.Data");
|
||
|
dojo.provide("dojox.wire.ml.DataProperty");
|
||
|
|
||
|
dojo.require("dijit._Widget");
|
||
|
dojo.require("dijit._Container");
|
||
|
dojo.require("dojox.wire.ml.util");
|
||
|
|
||
|
dojo.declare("dojox.wire.ml.Data", [dijit._Widget, dijit._Container], {
|
||
|
// summary:
|
||
|
// A widget for a data object
|
||
|
// description:
|
||
|
// This widget represents an object with '_properties' property.
|
||
|
// If child 'DataProperty' widgets exist, they are used to initialize
|
||
|
// propertiy values of '_properties' object.
|
||
|
|
||
|
startup: function(){
|
||
|
// summary:
|
||
|
// Call _initializeProperties()
|
||
|
// description:
|
||
|
// See _initializeProperties().
|
||
|
this._initializeProperties();
|
||
|
},
|
||
|
|
||
|
_initializeProperties: function(/*Boolean*/reset){
|
||
|
// summary:
|
||
|
// Initialize a data object
|
||
|
// description:
|
||
|
// If this widget has child DataProperty widgets, their getValue()
|
||
|
// methods are called and set the return value to a property
|
||
|
// specified by 'name' attribute of the child widgets.
|
||
|
// reset:
|
||
|
// A boolean to reset current properties
|
||
|
if(!this._properties || reset){
|
||
|
this._properties = {};
|
||
|
}
|
||
|
var children = this.getChildren();
|
||
|
for(var i in children){
|
||
|
var child = children[i];
|
||
|
if((child instanceof dojox.wire.ml.DataProperty) && child.name){
|
||
|
this.setPropertyValue(child.name, child.getValue());
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
getPropertyValue: function(/*String*/property){
|
||
|
// summary:
|
||
|
// Return a property value
|
||
|
// description:
|
||
|
// This method returns the value of a property, specified with
|
||
|
// 'property' argument, in '_properties' object.
|
||
|
// property:
|
||
|
// A property name
|
||
|
// returns:
|
||
|
// A property value
|
||
|
return this._properties[property]; //anything
|
||
|
},
|
||
|
|
||
|
setPropertyValue: function(/*String*/property, /*anything*/value){
|
||
|
// summary:
|
||
|
// Store a property value
|
||
|
// description:
|
||
|
// This method stores 'value' as a property, specified with
|
||
|
// 'property' argument, in '_properties' object.
|
||
|
// property:
|
||
|
// A property name
|
||
|
// value:
|
||
|
// A property value
|
||
|
this._properties[property] = value;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
dojo.declare("dojox.wire.ml.DataProperty", [dijit._Widget, dijit._Container], {
|
||
|
// summary:
|
||
|
// A widget to define a data property
|
||
|
// description:
|
||
|
// Attributes of this widget are used to add a property to the parent
|
||
|
// Data widget.
|
||
|
// 'type' attribute specifies one of "string", "number", "boolean",
|
||
|
// "array", "object" and "element" (DOM Element)
|
||
|
// (default to "string").
|
||
|
// If 'type' is "array" or "object", child DataProperty widgets are
|
||
|
// used to initialize the array elements or the object properties.
|
||
|
// name:
|
||
|
// A property name
|
||
|
// type:
|
||
|
// A property type name
|
||
|
// value:
|
||
|
// A property value
|
||
|
name: "",
|
||
|
type: "",
|
||
|
value: "",
|
||
|
|
||
|
getValue: function(){
|
||
|
// summary:
|
||
|
// Returns a property value
|
||
|
// description:
|
||
|
// If 'type' is specified, 'value' attribute is converted to
|
||
|
// the specified type and returned.
|
||
|
// Otherwise, 'value' attribute is returned as is.
|
||
|
// returns:
|
||
|
// A property value
|
||
|
var value = this.value;
|
||
|
if(this.type){
|
||
|
if(this.type == "number"){
|
||
|
value = parseInt(value);
|
||
|
}else if(this.type == "boolean"){
|
||
|
value = (value == "true");
|
||
|
}else if(this.type == "array"){
|
||
|
value = [];
|
||
|
var children = this.getChildren();
|
||
|
for(var i in children){
|
||
|
var child = children[i];
|
||
|
if(child instanceof dojox.wire.ml.DataProperty){
|
||
|
value.push(child.getValue());
|
||
|
}
|
||
|
}
|
||
|
}else if(this.type == "object"){
|
||
|
value = {};
|
||
|
var children = this.getChildren();
|
||
|
for(var i in children){
|
||
|
var child = children[i];
|
||
|
if((child instanceof dojox.wire.ml.DataProperty) && child.name){
|
||
|
value[child.name] = child.getValue();
|
||
|
}
|
||
|
}
|
||
|
}else if(this.type == "element"){
|
||
|
value = new dojox.wire.ml.XmlElement(value);
|
||
|
var children = this.getChildren();
|
||
|
for(var i in children){
|
||
|
var child = children[i];
|
||
|
if((child instanceof dojox.wire.ml.DataProperty) && child.name){
|
||
|
value.setPropertyValue(child.name, child.getValue());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return value; //anything
|
||
|
}
|
||
|
});
|
||
|
|
||
|
}
|