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