//提供两种方式,一种是传入selectValue,selectText, 另外一种是 用onLoadData 或 loadData 加载数据, MWF.xDesktop.requireApp("Template", "MTooltips", null, false); var MSelector = new Class({ Extends: MWF.widget.Common, Implements: [Options, Events], options: { "style": "default", "width": "230px", "height": "30px", "defaultOptionLp" : "请选择", "trigger" : "delay", //immediately "isSetSelectedValue" : true, "isChangeOptionStyle" : true, "inputEnable" : false, "isCreateReadNode" : true, //适应给MDomitem的做法 "emptyOptionEnable" : true, "containerIsTarget" : false, "tooltipWhenNoSelectValue" : false, "hasScrollBar" : true, "hideByClickBody" : false, "textField" : "", "valueField" : "", "value" : "", "text" : "", "defaultVaue" : "", "selectValue" : "", "selectText" : "", "isEdited" : true, "tooltipsOptions" : { axis: "y", //箭头在x轴还是y轴上展现 position : { //node 固定的位置 x : "center", //x轴上left center right, auto 系统自动计算 y : "bottom" //y 轴上top middle bottom, auto 系统自动计算 }, event : "click", //事件类型,有target 时有效, mouseenter对应mouseleave,click 对应 container 的 click hiddenDelay : 200, //ms , 有target 且 事件类型为 mouseenter 时有效 displayDelay : 0 //ms , 有target 且事件类型为 mouseenter 时有效 } }, initialize: function (container, options , app, css, dropdownContainer ) { this.setOptions(options); if( !this.options.isEdited && !this.options.isCreateReadNode ){ }else{ this.path = "../x_component_Template/$MSelector/"; this.cssPath = "../x_component_Template/$MSelector/"+this.options.style+"/css.wcss"; this._loadCss(); if( css ){ this.css = Object.merge( Object.clone(this.css), css ) } } this.valSeparator = /,|;|\^\^|\|/; //如果是多值对象,作为用户选择的多个值的分隔符 this.app = app; this.container = $(container); this.dropdownContainer = dropdownContainer || $(dropdownContainer); }, load : function( callback ){ if( this.options.isEdited ){ this.loadEdit(callback) }else{ this.loadRead(callback) } }, initPara: function(){ this.itemNodeList = []; this.itemNodeObject = {}; this.value = this.options.value || this.options.text || this.options.defaultVaue; this.text = this.options.text || this.options.value || this.options.defaultVaue; this.textField = this.options.textField || this.options.valueField; this.valueField = this.options.valueField || this.options.textField; if( this.options.selectValue || this.options.selectText ){ this.textField = "text"; this.valueField = "value"; var selectValue = this.options.selectValue; var selectText = this.options.selectText; this.selectValues = typeOf( selectValue ) == "array" ? selectValue : selectValue.split( this.valSeparator ); this.selectTexts = typeOf( selectText ) == "array" ? selectText : selectText.split(this.valSeparator); this.data = []; if( this.options.emptyOptionEnable ){ this.data.push({ value : "", text : this.options.defaultOptionLp || "" }) } this.selectValues.each( function( v,i ){ this.data.push({ value : v, text : this.selectTexts[i] }) }.bind(this)) } }, loadRead: function(callback){ this.initPara(); var fun = function(){ for( var i=0; i 0 ){ this.createItemList( this.data, contentNode ) }else if( this.selector.options.tooltipWhenNoSelectValue ){ this.createNoSelectValueNode( contentNode ); } }, createNoSelectValueNode:function( node ){ var _selector = this.selector; this.css = _selector.css; if(_selector.selectArrowNode)_selector.selectArrowNode.setStyles( this.css.selectArrowNode_up ); _selector.listContentNode = new Element("div.listContentNode",{ "styles":this.css.listContentNode }).inject( node ); _selector.listNode = new Element("div.listNode",{ "styles":this.css.listNode }).inject(_selector.listContentNode); var noTooltipNode = new Element("div.listItemNode",{ "styles":this.css.listItemNode, "text" : _selector.options.tooltipWhenNoSelectValue }).inject(_selector.listNode); var height = parseFloat(_selector.options.height)+"px"; noTooltipNode.setStyles({ "height": height, "line-height":height }); }, createItemList:function(data, node){ data = data || []; var _selector = this.selector; this.css = _selector.css; if(_selector.selectArrowNode)_selector.selectArrowNode.setStyles( this.css.selectArrowNode_up ); _selector.listContentNode = new Element("div.listContentNode",{ "styles":this.css.listContentNode }).inject( node ); //_selector.listContentNode.setStyles({ // "width": node.getSize().x+"px" //}); _selector.listNode = new Element("div.listNode",{ "styles":this.css.listNode }).inject(_selector.listContentNode); if( _selector.options.hasScrollBar )_selector.setScrollBar(_selector.listNode); data.each(function(d){ this.createItem( d ); }.bind(this)); }, createItem: function( data ){ var _selector = this.selector; if( !_selector.listNode )return; var listItemNode = new Element("div.listItemNode",{ "styles":this.css.listItemNode, "text": data[ _selector.textField ] }).inject(_selector.listNode); listItemNode.setStyles({ "height":_selector.options.height, "line-height":_selector.options.height }); if(data)listItemNode.store("data",data); listItemNode.addEvents({ "mousedown" : function(ev){ ev.stopPropagation(); }, "click":function(ev){ var _self = this.obj; var data = this.itemNode.retrieve( "data" ); _self.selector.setCurrentItem( this.itemNode ); _self.selector._selectItem( this.itemNode, data, ev ); _self.selector.fireEvent("selectItem", [ this.itemNode, data, ev ] ); _self.hide(); ev.stopPropagation(); }.bind({ obj : this, itemNode : listItemNode }), "mouseover":function(){ if( this.obj.selector.currentItemNode != this.itemNode || !this.obj.selector.options.isChangeOptionStyle ){ this.itemNode.setStyles( this.obj.selector.css.listItemNode_over ); if( this.obj.selector.options.mainColor_bg )this.itemNode.addClass(this.obj.selector.options.mainColor_bg) } }.bind( {obj : this, itemNode : listItemNode }), "mouseout":function(){ if( this.obj.selector.currentItemNode != this.itemNode || !this.obj.selector.options.isChangeOptionStyle ){ this.itemNode.setStyles( this.obj.selector.css.listItemNode ); if( this.obj.selector.options.mainColor_bg )this.itemNode.removeClass(this.obj.selector.options.mainColor_bg) } }.bind( {obj : this, itemNode : listItemNode }) }); _selector.itemNodeList.push( listItemNode ); _selector.itemNodeObject[ data[ _selector.valueField ] ] = listItemNode; var isCurrent = false; if( _selector.currentItemData ){ isCurrent = data[ _selector.valueField ] == _selector.currentItemData[ _selector.valueField ]; }else if( _selector.value ){ isCurrent = data[ _selector.valueField ] == _selector.value; }else if( _selector.text ){ isCurrent = data[ _selector.textField ] == _selector.text; } if( isCurrent )_selector.setCurrentItem( listItemNode ); _selector.fireEvent("postCreateItem", [ listItemNode, data ] ); _selector._postCreateItem(listItemNode, data) } }); MWF.xApplication.Template = MWF.xApplication.Template || {}; MWF.xApplication.Template.MSelector = MSelector;