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); } } }); }