New file |
0,0 → 1,179 |
if(!dojo._hasResource["dojox.wire.DataWire"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.wire.DataWire"] = true; |
dojo.provide("dojox.wire.DataWire"); |
|
dojo.require("dojox.wire.Wire"); |
|
dojo.declare("dojox.wire.DataWire", dojox.wire.Wire, { |
// summary: |
// A Wire for item attributes of data stores |
// description: |
// This class accesses item attributes of data stores with a dotted |
// notation of attribute names specified to 'attribute' property, |
// using data APIs of a data store specified to 'dataStore' property. |
// The root object for this class must be an item of the data store. |
// Intermediate attribute names in the dotted notation specify |
// attributes for child items, which are used for repeated calls to |
// data APIs until reached to a descendant attribute. |
// Attribute names may have an array index, such as "a[0]", to |
// identify an array element of the attribute value. |
|
_wireClass: "dojox.wire.DataWire", |
|
constructor: function(/*Object*/args){ |
// summary: |
// Initialize properties |
// description: |
// If 'dataStore' property is not specified, but 'parent' property |
// is specified, 'dataStore' property is copied from the parent. |
// args: |
// Arguments to initialize properties |
// dataStore: |
// A data store |
// attribute: |
// A dotted notation to a descendant attribute |
if(!this.dataStore && this.parent){ |
this.dataStore = this.parent.dataStore; |
} |
}, |
_getValue: function(/*Object*/object){ |
// summary: |
// Return an attribute value of an item |
// description: |
// This method uses a root item passed in 'object' argument and |
// 'attribute' property to call getValue() method of |
// 'dataStore'. |
// If an attribute name have an array suffix ("[]"), getValues() |
// method is called, instead. |
// If an index is specified in the array suffix, an array element |
// for the index is returned, instead of the array itself. |
// object: |
// A root item |
// returns: |
// A value found, otherwise 'undefined' |
if(!object || !this.attribute || !this.dataStore){ |
return object; //Object |
} |
|
var value = object; |
var list = this.attribute.split('.'); |
for(var i in list){ |
value = this._getAttributeValue(value, list[i]); |
if(!value){ |
return undefined; //undefined |
} |
} |
return value; //anything |
}, |
|
_setValue: function(/*Object*/object, /*anything*/value){ |
// summary: |
// Set an attribute value to an item |
// description: |
// This method uses a root item passed in 'object' argument and |
// 'attribute' property to identify an item. |
// Then, setValue() method of 'dataStore' is called with a leaf |
// attribute name and 'value' argument. |
// If an attribute name have an array suffix ("[]"), setValues() |
// method is called, instead. |
// If an index is specified in the array suffix, an array element |
// for the index is set to 'value', instead of the array itself. |
// object: |
// A root item |
// value: |
// A value to set |
// returns: |
// 'object', or 'undefined' for invalid attribute |
if(!object || !this.attribute || !this.dataStore){ |
return object; //Object |
} |
|
var item = object; |
var list = this.attribute.split('.'); |
var last = list.length - 1; |
for(var i = 0; i < last; i++){ |
item = this._getAttributeValue(item, list[i]); |
if(!item){ |
return undefined; //undefined |
} |
} |
this._setAttributeValue(item, list[last], value); |
return object; //Object |
}, |
|
_getAttributeValue: function(/*Object*/item, /*String*/attribute){ |
// summary: |
// Return an attribute value of an item |
// description: |
// This method uses an item passed in 'item' argument and |
// 'attribute' argument to call getValue() method of 'dataStore'. |
// If an attribute name have an array suffix ("[]"), getValues() |
// method is called, instead. |
// If an index is specified in the array suffix, an array element |
// for the index is returned, instead of the array itself. |
// item: |
// An item |
// attribute |
// An attribute name |
// returns: |
// A value found, otherwise 'undefined' |
var value = undefined; |
var i1 = attribute.indexOf('['); |
if(i1 >= 0){ |
var i2 = attribute.indexOf(']'); |
var index = attribute.substring(i1 + 1, i2); |
attribute = attribute.substring(0, i1); |
var array = this.dataStore.getValues(item, attribute); |
if(array){ |
if(!index){ // return array for "attribute[]" |
value = array; |
}else{ |
value = array[index]; |
} |
} |
}else{ |
value = this.dataStore.getValue(item, attribute); |
} |
return value; //anything |
}, |
|
_setAttributeValue: function(/*Object*/item, /*String*/attribute, /*anything*/value){ |
// summary: |
// Set an attribute value to an item |
// description: |
// This method uses an item passed in 'item' argument and |
// 'attribute' argument to call setValue() method of 'dataStore' |
// with 'value' argument. |
// If an attribute name have an array suffix ("[]"), setValues() |
// method is called, instead. |
// If an index is specified in the array suffix, an array element |
// for the index is set to 'value', instead of the array itself. |
// item: |
// An item |
// attribute: |
// An attribute name |
// value: |
// A value to set |
var i1 = attribute.indexOf('['); |
if(i1 >= 0){ |
var i2 = attribute.indexOf(']'); |
var index = attribute.substring(i1 + 1, i2); |
attribute = attribute.substring(0, i1); |
var array = null; |
if(!index){ // replace whole array for "attribute[]" |
array = value; |
}else{ |
array = this.dataStore.getValues(item, attribute); |
if(!array){ |
array = []; |
} |
array[index] = value; |
} |
this.dataStore.setValues(item, attribute, array); |
}else{ |
this.dataStore.setValue(item, attribute, value); |
} |
} |
}); |
|
} |