dojo MultipleEditor 类

用于DataGrid 编辑时,根据不同数据类型展现不同的编辑样式

dojo.provide("widget.MultipleEditor");
dojo.require("dojox.grid.cells.dijit");

dojo.declare(
				"widget.MultipleEditor",[ dojox.grid.cells._Widget ],{

					_types : {
						"number": {
						     widgetClass: dijit.form.NumberTextBox
						 },"bool" : {
							widgetClass : dijit.form.CheckBox
						},"string" : {
							widgetClass : dijit.form.TextBox
						},"date" : {
							widgetClass : dijit.form.DateTextBox
						},"combo" : {
							widgetClass : dijit.form.ComboBox
						},"select" : {
							widgetClass : dijit.form.FilteringSelect
						}
					},setType : function(type,typeProps) {
						this.type = type;
						this.widgetClass = this._types[type] ? this._types[type].widgetClass
								: this.widgetClass;
						var props = {};

						var wprops = typeProps ? typeProps
								: this._types[type].widgetProps;
						for ( var i in wprops) {
							if (dojo.getObject(wprops[i])) {
								props[i] = dojo.getObject(wprops[i]);
							} else {
								props[i] = wprops[i];
							}
						}
						this.widgetProps = this._types[type] ? props
								: this.widgetProps;
					},format : function(inRowIndex,inItem) {
						//console.log("format");
						var f,i = this.grid.edit.info;
						var d = this.get ? this.get(inRowIndex,inItem)
								: (this.value || this.defaultValue);
						var s = this.grid.store;
						this.editableProp = true;

						if (s.isItem(inItem)
								&& s.hasAttribute(inItem,"editable")) {
							this.editableProp = s.getValue(inItem,"editable");
						}

						if (this.editable
								&& (this.alwaysEditing || (i.rowIndex == inRowIndex && i.cell == this))
								&& this.editableProp) {
							try {
								var type = this.grid.store.getValue(inItem,"type"),typeProps = {};
								var tprops = this.grid.store.getValue(inItem,"typeProps");
								if (tprops) {
									typeProps = dojo.isObject(tprops) ? tprops
											: dojo.getObject(tprops) ? dojo
													.getObject(tprops)
													: typeProps;
								}
								if (type) {
									this.widget = null;
									this.value = null;
									delete typeProps._value;
									this.constraint = typeProps.constraint ? typeProps.constraint
											: {};
									this.setType(type,typeProps);

								}
							} catch (e) {
							}
							//console.log("formatEditing!!!!!!!");
							return this.formatEditing(d,inRowIndex);
						} else {

							var v = (d != this.defaultValue && (f = this.formatter)) ? f
									.call(this,d,inRowIndex)
									: d;
							if (!this.editableProp) {
								this.value = d;
								//this.widget = null;	
							}
							return (typeof v == "undefined" ? this.defaultValue
									: v);
						}
					},sizeWidget : function(_32,_33,_34) {
						if (this.type != "bool") {
							this.inherited(arguments);
						} else {
							return;
						}
					},setValue : function(_30,_31) {
						if (this.editableProp == false) {
							return;
						}
						if (this.type == "bool") {
							//console.log("set value!!!!!!!!!!!!");
							this.widget.attr("checked",_31);
						} else if (this.type == "date") {
							this.widget.attr("value",new Date(_31));
						} else {
							this.inherited(arguments);
						}
					},isEditable : function(rowIndex) {
						var item = this.grid.getItem(rowIndex);

						var s = this.grid.store;

						if (s.isItem(item) && s.hasAttribute(item,"editable")) {
							return s.getValue(item,"editable");
						} else {
							return true;
						}
					},getValue : function(rowIndex) {
						//console.log("get value");
						if (this.isEditable(rowIndex) == false) {
							var item = this.grid.getItem(rowIndex);
							return this.grid.store.getValue(item,"value");
						}

						var val = this.widget ? this.widget.attr('value')
								|| this.value : this.value;

						if (this.type == "bool") {
							return this.widget.attr("checked");
						} else if (this.type == "date") {

							return val ? dojo.isString(val) ? val
									: dojo.date.locale.format(val,this.widget.constraints)
									: dojo.date.locale.format(new Date(),this.widget.constraints);
						} else if (this.type == "number") {
							return val ? val : 0;
						} else if (this.type == "select") {
							return val ? val : "";
						} else {
							return this.inherited(arguments);
						}
					},markupFactory : function() {
						this.inherited(arguments);
					},attachWidget : function(_d,_e,_f) {
						_d.appendChild(this.widget.domNode);
						this.setValue(_f,_e);
					},getWidgetProps : function(_2d) {
						if (this.type == "date") {

							var val = this.constraint.datePattern ? dojo.date.locale
									.parse(_2d,dojo.mixin(this.constraint,{
										selector : "date"
									}))
									: dojo.date.locale.parse(_2d,{
										datePattern : "dd/MM/yyyy",selector : "date"
									});
							return dojo.mixin(this.inherited(arguments),{
								value : val
							});
						} else {
							return this.inherited(arguments);
						}
					},formatNode : function(_10,_11,_12) {
						//console.log("formatNode ");
						//console.log(this.widget);
						//console.log("this!!!!!!!");
						//console.log(this);
						if (!this.widgetClass) {
							return _11;
						}

						if (!this.widget) {
							//console.log("create widget!!!!!");
							this.widget = this.createWidget.apply(this,arguments);
							if (this.type == "bool") {
								this.widget.attr("checked",_11 == "true"
										|| _11 == true ? true : false);
							}

						} else {
							//console.log("change widget value");
							this.attachWidget.apply(this,arguments);
						}

						this.sizeWidget.apply(this,arguments);
						this.focus();
						this.save();

					}
				});

数据类型:
({
identifier:"prop",
label: items:[{
prop:"Left",
group:"Properties",
value:"",
type:"date",
typeProps:{_value:true,constraint:{_value:true,datePattern:"dd-MM-yyyy"}}
},{
prop:"Top",68)">"50",
editable:false,68)">"number",store:"ppcomboStore",searchAttr:"value",labelAttr:"label"}
},68)">"Width",68)">"500",68)">"string"
}
})

相关文章

我有一个网格,可以根据更大的树结构编辑小块数据.为了更容易...
我即将开始开发一款教育性的视频游戏.我已经决定以一种我可以...
我正在使用带有Grails2.3.9的Dojo1.9.DojoNumberTextBox小部...
1.引言鉴于个人需求的转变,本系列将记录自学arcgisapiforja...
我正在阅读使用dojo’sdeclare进行类创建的语法.描述令人困惑...
我的团队由更多的java人员和JavaScript经验丰富组成.我知道这...