root / trunk / web / dojo / dojox / wire / Wire.js @ 12
History | View | Annotate | Download (4.19 KB)
1 |
/*
|
---|---|
2 |
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
3 |
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
4 |
see: http://dojotoolkit.org/license for details
|
5 |
*/
|
6 |
|
7 |
|
8 |
if(!dojo._hasResource["dojox.wire.Wire"]){ |
9 |
dojo._hasResource["dojox.wire.Wire"]=true; |
10 |
dojo.provide("dojox.wire.Wire");
|
11 |
dojo.require("dojox.wire._base");
|
12 |
dojo.declare("dojox.wire.Wire",null,{_wireClass:"dojox.wire.Wire",constructor:function(_1){ |
13 |
dojo.mixin(this,_1);
|
14 |
if(this.converter){ |
15 |
if(dojo.isString(this.converter)){ |
16 |
var _2=dojo.getObject(this.converter); |
17 |
if(dojo.isFunction(_2)){
|
18 |
try{
|
19 |
var _3=new _2(); |
20 |
if(_3&&!dojo.isFunction(_3["convert"])){ |
21 |
this.converter={convert:_2}; |
22 |
}else{
|
23 |
this.converter=_3;
|
24 |
} |
25 |
} |
26 |
catch(e){
|
27 |
} |
28 |
}else{
|
29 |
if(dojo.isObject(_2)){
|
30 |
if(dojo.isFunction(_2["convert"])){ |
31 |
this.converter=_2;
|
32 |
} |
33 |
} |
34 |
} |
35 |
if(dojo.isString(this.converter)){ |
36 |
var _4=dojox.wire._getClass(this.converter); |
37 |
if(_4){
|
38 |
this.converter=new _4(); |
39 |
}else{
|
40 |
this.converter=undefined; |
41 |
} |
42 |
} |
43 |
}else{
|
44 |
if(dojo.isFunction(this.converter)){ |
45 |
this.converter={convert:this.converter}; |
46 |
} |
47 |
} |
48 |
} |
49 |
},getValue:function(_5){ |
50 |
var _6=undefined; |
51 |
if(dojox.wire.isWire(this.object)){ |
52 |
_6=this.object.getValue(_5);
|
53 |
}else{
|
54 |
_6=(this.object||_5);
|
55 |
} |
56 |
if(this.property){ |
57 |
var _7=this.property.split("."); |
58 |
for(var i in _7){ |
59 |
if(!_6){
|
60 |
return _6;
|
61 |
} |
62 |
_6=this._getPropertyValue(_6,_7[i]);
|
63 |
} |
64 |
} |
65 |
var _8=undefined; |
66 |
if(this._getValue){ |
67 |
_8=this._getValue(_6);
|
68 |
}else{
|
69 |
_8=_6; |
70 |
} |
71 |
if(_8){
|
72 |
if(this.type){ |
73 |
if(this.type=="string"){ |
74 |
_8=_8.toString(); |
75 |
}else{
|
76 |
if(this.type=="number"){ |
77 |
_8=parseInt(_8,10);
|
78 |
}else{
|
79 |
if(this.type=="boolean"){ |
80 |
_8=(_8!="false");
|
81 |
}else{
|
82 |
if(this.type=="array"){ |
83 |
if(!dojo.isArray(_8)){
|
84 |
_8=[_8]; |
85 |
} |
86 |
} |
87 |
} |
88 |
} |
89 |
} |
90 |
} |
91 |
if(this.converter&&this.converter.convert){ |
92 |
_8=this.converter.convert(_8,this); |
93 |
} |
94 |
} |
95 |
return _8;
|
96 |
},setValue:function(_9,_a){ |
97 |
var _b=undefined; |
98 |
if(dojox.wire.isWire(this.object)){ |
99 |
_b=this.object.getValue(_a);
|
100 |
}else{
|
101 |
_b=(this.object||_a);
|
102 |
} |
103 |
var _c=undefined; |
104 |
var o;
|
105 |
if(this.property){ |
106 |
if(!_b){
|
107 |
if(dojox.wire.isWire(this.object)){ |
108 |
_b={}; |
109 |
this.object.setValue(_b,_a);
|
110 |
}else{
|
111 |
throw new Error(this._wireClass+".setValue(): invalid object"); |
112 |
} |
113 |
} |
114 |
var _d=this.property.split("."); |
115 |
var _e=_d.length-1; |
116 |
for(var i=0;i<_e;i++){ |
117 |
var p=_d[i];
|
118 |
o=this._getPropertyValue(_b,p);
|
119 |
if(!o){
|
120 |
o={}; |
121 |
this._setPropertyValue(_b,p,o);
|
122 |
} |
123 |
_b=o; |
124 |
} |
125 |
_c=_d[_e]; |
126 |
} |
127 |
if(this._setValue){ |
128 |
if(_c){
|
129 |
o=this._getPropertyValue(_b,_c);
|
130 |
if(!o){
|
131 |
o={}; |
132 |
this._setPropertyValue(_b,_c,o);
|
133 |
} |
134 |
_b=o; |
135 |
} |
136 |
var _f=this._setValue(_b,_9); |
137 |
if(!_b&&_f){
|
138 |
if(dojox.wire.isWire(this.object)){ |
139 |
this.object.setValue(_f,_a);
|
140 |
}else{
|
141 |
throw new Error(this._wireClass+".setValue(): invalid object"); |
142 |
} |
143 |
} |
144 |
}else{
|
145 |
if(_c){
|
146 |
this._setPropertyValue(_b,_c,_9);
|
147 |
}else{
|
148 |
if(dojox.wire.isWire(this.object)){ |
149 |
this.object.setValue(_9,_a);
|
150 |
}else{
|
151 |
throw new Error(this._wireClass+".setValue(): invalid property"); |
152 |
} |
153 |
} |
154 |
} |
155 |
},_getPropertyValue:function(_10,_11){ |
156 |
var _12=undefined; |
157 |
var i1=_11.indexOf("["); |
158 |
if(i1>=0){ |
159 |
var i2=_11.indexOf("]"); |
160 |
var _13=_11.substring(i1+1,i2); |
161 |
var _14=null; |
162 |
if(i1===0){ |
163 |
_14=_10; |
164 |
}else{
|
165 |
_11=_11.substring(0,i1);
|
166 |
_14=this._getPropertyValue(_10,_11);
|
167 |
if(_14&&!dojo.isArray(_14)){
|
168 |
_14=[_14]; |
169 |
} |
170 |
} |
171 |
if(_14){
|
172 |
_12=_14[_13]; |
173 |
} |
174 |
}else{
|
175 |
if(_10.getPropertyValue){
|
176 |
_12=_10.getPropertyValue(_11); |
177 |
}else{
|
178 |
var _15="get"+_11.charAt(0).toUpperCase()+_11.substring(1); |
179 |
if(this._useGet(_10)){ |
180 |
_12=_10.get(_11); |
181 |
}else{
|
182 |
if(this._useAttr(_10)){ |
183 |
_12=_10.attr(_11); |
184 |
}else{
|
185 |
if(_10[_15]){
|
186 |
_12=_10[_15](); |
187 |
}else{
|
188 |
_12=_10[_11]; |
189 |
} |
190 |
} |
191 |
} |
192 |
} |
193 |
} |
194 |
return _12;
|
195 |
},_setPropertyValue:function(_16,_17,_18){ |
196 |
var i1=_17.indexOf("["); |
197 |
if(i1>=0){ |
198 |
var i2=_17.indexOf("]"); |
199 |
var _19=_17.substring(i1+1,i2); |
200 |
var _1a=null; |
201 |
if(i1===0){ |
202 |
_1a=_16; |
203 |
}else{
|
204 |
_17=_17.substring(0,i1);
|
205 |
_1a=this._getPropertyValue(_16,_17);
|
206 |
if(!_1a){
|
207 |
_1a=[]; |
208 |
this._setPropertyValue(_16,_17,_1a);
|
209 |
} |
210 |
} |
211 |
_1a[_19]=_18; |
212 |
}else{
|
213 |
if(_16.setPropertyValue){
|
214 |
_16.setPropertyValue(_17,_18); |
215 |
}else{
|
216 |
var _1b="set"+_17.charAt(0).toUpperCase()+_17.substring(1); |
217 |
if(this._useSet(_16)){ |
218 |
_16.set(_17,_18); |
219 |
}else{
|
220 |
if(this._useAttr(_16)){ |
221 |
_16.attr(_17,_18); |
222 |
}else{
|
223 |
if(_16[_1b]){
|
224 |
_16[_1b](_18); |
225 |
}else{
|
226 |
_16[_17]=_18; |
227 |
} |
228 |
} |
229 |
} |
230 |
} |
231 |
} |
232 |
},_useGet:function(_1c){ |
233 |
var _1d=false; |
234 |
if(dojo.isFunction(_1c.get)){
|
235 |
_1d=true;
|
236 |
} |
237 |
return _1d;
|
238 |
},_useSet:function(_1e){ |
239 |
var _1f=false; |
240 |
if(dojo.isFunction(_1e.set)){
|
241 |
_1f=true;
|
242 |
} |
243 |
return _1f;
|
244 |
},_useAttr:function(_20){ |
245 |
var _21=false; |
246 |
if(dojo.isFunction(_20.attr)){
|
247 |
_21=true;
|
248 |
} |
249 |
return _21;
|
250 |
}}); |
251 |
} |