2015-05-19 14:45:47 +08:00
// FineUI应用程序域
var F = function ( cmpName ) {
return Ext . getCmp ( cmpName ) ;
} ;
F . target = function ( target ) {
return F . util . getTargetWindow ( target ) ;
} ;
F . alert = function ( ) {
F . util . alert . apply ( window , arguments ) ;
} ;
F . init = function ( ) {
2016-01-10 01:19:30 -05:00
F . util . init . apply ( window , arguments ) ;
2015-05-19 14:45:47 +08:00
} ;
F . load = function ( ) {
F . util . load . apply ( window , arguments ) ;
} ;
F . ready = function ( ) {
F . util . ready . apply ( window , arguments ) ;
} ;
F . ajaxReady = function ( ) {
F . util . ajaxReady . apply ( window , arguments ) ;
//if (typeof (onAjaxReady) == 'function') {
// onAjaxReady();
//}
} ;
F . beforeAjax = function ( ) {
F . util . beforeAjax . apply ( window , arguments ) ;
} ;
2016-01-10 01:19:30 -05:00
F . beforeAjaxSuccess = function ( ) {
F . util . beforeAjaxSuccess . apply ( window , arguments ) ;
} ;
2015-05-19 14:45:47 +08:00
F . stop = function ( ) {
var event = arguments . callee . caller . arguments [ 0 ] || window . event ;
F . util . stopEventPropagation ( event ) ;
} ;
F . confirm = function ( ) {
F . util . confirm . apply ( null , arguments ) ;
} ;
F . toggle = function ( el , className ) {
Ext . get ( el ) . toggleCls ( className ) ;
} ;
F . fieldValue = function ( cmp ) {
return F . util . getFormFieldValue ( cmp ) ;
} ;
F . getHidden = function ( ) {
return F . util . getHiddenFieldValue . apply ( window , arguments ) ;
} ;
F . setHidden = function ( ) {
return F . util . setHiddenFieldValue . apply ( window , arguments ) ;
} ;
F . addCSS = function ( ) {
F . util . addCSS . apply ( window , arguments ) ;
} ;
2016-01-10 01:19:30 -05:00
F . initTreeTabStrip = function ( ) {
F . util . initTreeTabStrip . apply ( window , arguments ) ;
} ;
F . addMainTab = function ( ) {
F . util . addMainTab . apply ( window , arguments ) ;
} ;
F . getActiveWindow = function ( ) {
return F . wnd . getActiveWindow . apply ( window , arguments ) ;
} ;
// 记录最后一个控件的序号
F . f _objectIndex = 0 ;
2017-09-05 10:49:48 +08:00
// 标识这个页面是由 FineUI 创建的
F . fineui = '4.2.4' ;
2016-01-10 01:19:30 -05:00
// 为了兼容保留函数签名: F.customEvent
F . f _customEvent = F . customEvent = function ( argument , validate ) {
//var pmv = F.f_pagemanager.validate;
//if (validate && pmv) {
// if (!F.util.validForms(pmv.forms, pmv.target, pmv.messagebox)) {
// return false;
// }
//}
//__doPostBack(F.f_pagemanager.name, argument);
var enableAjax ;
if ( typeof ( argument ) === 'boolean' ) {
enableAjax = argument ;
argument = validate ;
validate = arguments [ 2 ] ;
}
var pmv = F . f _pagemanager . validate ;
if ( validate && pmv ) {
2017-09-05 10:49:48 +08:00
if ( ! F . util . validForms ( pmv . forms , pmv . target , pmv . messagebox ) ) {
2016-01-10 01:19:30 -05:00
return false ;
}
}
if ( typeof ( enableAjax ) === 'boolean' ) {
_ _doPostBack ( enableAjax , F . f _pagemanager . name , argument ) ;
} else {
_ _doPostBack ( F . f _pagemanager . name , argument ) ;
}
} ;
2015-05-19 14:45:47 +08:00
// 更新EventValidation的值
2016-01-10 01:19:30 -05:00
F . f _eventValidation = function ( newValue ) {
2015-05-19 14:45:47 +08:00
F . setHidden ( "__EVENTVALIDATION" , newValue ) ;
} ;
2016-01-10 01:19:30 -05:00
F . f _state = function ( cmp , state ) {
F . util . setFState ( cmp , state ) ;
} ;
// 为了兼容保留函数签名: F.enable
F . f _enable = F . enable = function ( id ) {
F . util . enableSubmitControl ( id ) ;
} ;
// 为了兼容保留函数签名: F.disable
F . f _disable = F . disable = function ( id ) {
F . util . disableSubmitControl ( id ) ;
} ;
2015-05-19 14:45:47 +08:00
// 更新ViewState的值
2016-01-10 01:19:30 -05:00
F . f _viewState = function ( viewStateBeforeAJAX , newValue , startIndex ) {
2015-05-19 14:45:47 +08:00
var viewStateHiddenFiledId = '__VIEWSTATE' ;
var oldValue = F . getHidden ( viewStateHiddenFiledId ) ;
var viewStateChanged = false ;
if ( oldValue !== viewStateBeforeAJAX ) {
viewStateChanged = true ;
}
if ( typeof ( newValue ) === 'undefined' ) {
// AJAX过程中ViewState值没变化
if ( viewStateChanged ) {
F . setHidden ( viewStateHiddenFiledId , viewStateBeforeAJAX ) ;
}
} else {
// AJAX过程中ViewState值有变化
if ( Ext . type ( startIndex ) === 'number' && startIndex > 0 ) {
// 只返回startIndex之后的内容
if ( viewStateChanged ) {
// 无法处理!
return false ;
} else {
F . setHidden ( viewStateHiddenFiledId , oldValue . substr ( 0 , startIndex ) + newValue ) ;
}
} else {
// 返回完整的ViewState
F . setHidden ( viewStateHiddenFiledId , newValue ) ;
}
}
// 更新成功!
return true ;
} ;
// cookie('theme');
// cookie('theme', 'gray');
// cookie('theme', 'gray', { 'expires': 3 });
// expires: 天
// 新增 或者 修改Cookie
F . cookie = function ( key , value , options ) {
2016-01-10 01:19:30 -05:00
if ( typeof ( value ) === 'undefined' ) {
2015-05-19 14:45:47 +08:00
var cookies = document . cookie ? document . cookie . split ( '; ' ) : [ ] ;
var result = key ? '' : { } ;
Ext . Array . each ( cookies , function ( cookie , index ) {
var parts = cookie . split ( '=' ) ;
var partName = decodeURIComponent ( Ext . String . trim ( parts [ 0 ] ) ) ;
var partValue = decodeURIComponent ( Ext . String . trim ( parts [ 1 ] ) ) ;
if ( key ) {
if ( key === partName ) {
result = partValue ;
return false ;
}
} else {
result [ partName ] = partValue ;
}
} ) ;
return result ;
} else {
// Set cookie
options = Ext . apply ( options || { } , {
path : '/'
} ) ;
var expTime ;
if ( typeof ( options . expires ) === 'number' ) {
expTime = new Date ( ) ;
expTime . setTime ( expTime . getTime ( ) + options . expires * 24 * 60 * 60 * 1000 ) ;
}
document . cookie = [
encodeURIComponent ( key ) , '=' , encodeURIComponent ( value ) ,
options . expires ? '; expires=' + expTime . toUTCString ( ) : '' ,
options . path ? '; path=' + options . path : '' ,
options . domain ? '; domain=' + options . domain : '' ,
options . secure ? '; secure' : ''
] . join ( '' ) ;
}
} ;
// 删除Cookie
F . removeCookie = function ( key , options ) {
options = Ext . apply ( options || { } , {
path : '/' ,
'expires' : - 1
} ) ;
F . cookie ( key , '' , options ) ;
} ;
2016-01-10 01:19:30 -05:00
// 能否访问 iframe 中的 window.F 对象
F . canAccess = function ( iframeWnd ) {
2015-05-19 14:45:47 +08:00
2016-01-10 01:19:30 -05:00
// 访问 iframeWnd.F 时,可能出现错误 Blocked a frame with origin "http://fineui.com/" from accessing a cross-origin frame.
// Blocked: 这个问题出现在 http://fineui.com/ 页面加载一个 http://baidu.com/ 的 iframe 页面
try {
iframeWnd . F ;
iframeWnd . window ;
} catch ( e ) {
return false ;
}
2015-05-19 14:45:47 +08:00
2016-01-10 01:19:30 -05:00
if ( ! iframeWnd . F || ! iframeWnd . window ) {
return false ;
}
2015-05-19 14:45:47 +08:00
2016-01-10 01:19:30 -05:00
return true ;
} ;
2015-05-19 14:45:47 +08:00
2016-01-10 01:19:30 -05:00
Ext . onReady ( function ( ) {
// 加延迟,以保证在 zh_CN 中通过 Ext.onReady 注册的脚本先执行(其中对 Ext.Date 进行了初始化)
window . setTimeout ( function ( ) {
F . util . triggerLoad ( ) ;
F . util . triggerReady ( ) ;
F . util . hidePageLoading ( ) ;
} , 0 ) ;
2015-05-19 14:45:47 +08:00
} ) ;
( function ( ) {
// 遍历定义了 renderTo 属性的对象
// callback: 'return false' to prevent loop continue
function resolveRenderToObj ( callback ) {
Ext . ComponentManager . each ( function ( key , cmp ) {
if ( cmp . isXType && cmp . renderTo ) {
var result = callback . apply ( cmp , [ cmp ] ) ;
if ( result === false ) {
return false ; // break
}
}
} ) ;
}
2016-01-10 01:19:30 -05:00
/ *
2015-05-19 14:45:47 +08:00
// 能否访问 iframe 中的 window.F 对象
function canIFrameWindowAccessed ( iframeWnd ) {
// 访问 iframeWnd.F 时,可能出现错误 Blocked a frame with origin "http://fineui.com/" from accessing a cross-origin frame.
// Blocked: 这个问题出现在 http://fineui.com/ 页面加载一个 http://baidu.com/ 的 iframe 页面
try {
iframeWnd . F ;
} catch ( e ) {
return false ;
}
if ( ! iframeWnd . F ) {
return false ;
}
return true ;
}
2016-01-10 01:19:30 -05:00
* /
2015-05-19 14:45:47 +08:00
// FineUI常用函数域( Utility)
F . util = {
alertTitle : "Alert Dialog" ,
confirmTitle : "Confirm Dialog" ,
formAlertMsg : "Please provide valid value for {0}!" ,
formAlertTitle : "Form Invalid" ,
loading : "Loading..." ,
// 下拉列表的模板
ddlTPL : '<tpl for="."><div class="x-boundlist-item<tpl if="!enabled"> x-boundlist-item-disabled</tpl>">{prefix}{text}</div></tpl>' ,
// 初始化
init : function ( options ) { // msgTarget, labelWidth, labelSeparator, blankImageUrl, enableAjaxLoading, ajaxLoadingType, enableAjax, themeName, formChangeConfirm) {
2016-01-10 01:19:30 -05:00
Ext . apply ( F , options , {
language : 'zh_CN' ,
msgTarget : 'side' ,
labelWidth : 100 ,
labelSeparator : ': ' ,
//blankImageUrl: '',
enableAjaxLoading : true ,
ajaxLoadingType : 'default' ,
enableAjax : true ,
theme : 'neptune' ,
formChangeConfirm : false ,
ajaxTimeout : 120
} ) ;
// Ext.QuickTips.init(true); 在原生的IE7( 非IE8下的IE7模式) 会有问题
2015-05-19 14:45:47 +08:00
// 表现为iframe中的页面出现滚动条时, 页面上的所有按钮都不能点击了。
// 测试例子在: aspnet/test.aspx
//Ext.QuickTips.init(false);
Ext . tip . QuickTipManager . init ( ) ;
F . ajax . hookPostBack ( ) ;
2016-01-10 01:19:30 -05:00
//F.global_enable_ajax = F.enableAjax;
//F.global_enable_ajax_loading = F.enableAjaxLoading;
//F.global_ajax_loading_type = F.ajaxLoadingType;
2015-05-19 14:45:47 +08:00
// 添加Ajax Loading提示节点
F . ajaxLoadingDefault = Ext . get ( F . util . appendLoadingNode ( ) ) ;
F . ajaxLoadingMask = Ext . create ( 'Ext.LoadMask' , Ext . getBody ( ) , { msg : F . util . loading } ) ;
2016-01-10 01:19:30 -05:00
//F.form_upload_file = false;
//F.global_disable_ajax = false;
2015-05-19 14:45:47 +08:00
//F.x_window_manager = new Ext.WindowManager();
//F.x_window_manager.zseed = 6000;
F . util . setHiddenFieldValue ( 'F_CHANGED' , 'false' ) ;
document . forms [ 0 ] . autocomplete = 'off' ;
Ext . getBody ( ) . addCls ( 'f-body' ) ;
2016-01-10 01:19:30 -05:00
Ext . Ajax . timeout = F . ajaxTimeout * 1000 ;
2015-05-19 14:45:47 +08:00
// 向document.body添加主题类
if ( F . theme ) {
Ext . getBody ( ) . addCls ( 'f-theme-' + F . theme ) ;
}
if ( Ext . form . field ) {
var fieldPro = Ext . form . field . Base . prototype ;
fieldPro . msgTarget = F . msgTarget ;
fieldPro . labelWidth = F . labelWidth ;
fieldPro . labelSeparator = F . labelSeparator ;
fieldPro . autoFitErrors = true ;
}
if ( Ext . form . CheckboxGroup ) {
var checkboxgroupPro = Ext . form . CheckboxGroup . prototype ;
checkboxgroupPro . msgTarget = F . msgTarget ;
checkboxgroupPro . labelWidth = F . labelWidth ;
checkboxgroupPro . labelSeparator = F . labelSeparator ;
checkboxgroupPro . autoFitErrors = true ;
}
F . beforeunloadCheck = true ;
// 启用表单改变确认对话框
if ( F . formChangeConfirm ) {
// 下面这个方法在 Chrome、 Firefox下无效
//Ext.EventManager.on(window, 'beforeunload', function (event) {
window . onbeforeunload = function ( ) {
// 允许关闭页面前提示,并且表单改变
if ( F . beforeunloadCheck && F . util . formChanged ( ) ) {
return F . wnd . formChangeConfirmMsg ;
}
} ;
}
//if (enableBigFont) {
// Ext.getBody().addCls('bigfont');
//}
2016-01-10 01:19:30 -05:00
/ *
2015-05-19 14:45:47 +08:00
// IE6&7不支持, IE8以上支持"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="
if ( Ext . isIE6 || Ext . isIE7 ) {
Ext . BLANK _IMAGE _URL = F . blankImageUrl ;
}
* /
// Submit
F . ready ( function ( ) {
if ( F . submitbutton ) {
Ext . ComponentManager . each ( function ( key , cmp ) {
if ( cmp . isXType && cmp . renderTo ) {
if ( cmp . isXType ( 'tooltip' ) ) {
return true ; // continue
}
if ( cmp . isXType ( 'panel' ) || cmp . isXType ( 'formviewport' ) ) {
F . util . registerPanelEnterKey ( cmp ) ;
}
}
} ) ;
}
} ) ;
// 为了防止【页面中只有一个input[type=text], 则回车会提交表单】的问题, 现在页面上创建一个input[type=text]的空元素
F . util . appendFormNode ( '<input type="text" class="f-input-text-hidden">' ) ;
} ,
_readyList : [ ] ,
_ajaxReadyList : [ ] ,
_beforeAjaxList : [ ] ,
2016-01-10 01:19:30 -05:00
_beforeAjaxSuccessList : [ ] ,
2015-05-19 14:45:47 +08:00
_loadList : [ ] ,
ready : function ( callback ) {
F . util . _readyList . push ( callback ) ;
} ,
triggerReady : function ( ) {
Ext . Array . each ( F . util . _readyList , function ( item , index ) {
2016-01-10 01:19:30 -05:00
item . apply ( window ) ;
2015-05-19 14:45:47 +08:00
} ) ;
} ,
ajaxReady : function ( callback ) {
F . util . _ajaxReadyList . push ( callback ) ;
} ,
triggerAjaxReady : function ( ) {
Ext . Array . each ( F . util . _ajaxReadyList , function ( item , index ) {
2016-01-10 01:19:30 -05:00
item . apply ( window ) ;
2015-05-19 14:45:47 +08:00
} ) ;
} ,
beforeAjax : function ( callback ) {
F . util . _beforeAjaxList . push ( callback ) ;
} ,
triggerBeforeAjax : function ( ) {
2016-01-10 01:19:30 -05:00
var result = true , args = arguments ;
2015-05-19 14:45:47 +08:00
Ext . Array . each ( F . util . _beforeAjaxList , function ( item , index ) {
2016-01-10 01:19:30 -05:00
if ( item . apply ( window , args ) === false ) {
result = false ;
}
} ) ;
return result ;
} ,
beforeAjaxSuccess : function ( callback ) {
F . util . _beforeAjaxSuccessList . push ( callback ) ;
} ,
triggerBeforeAjaxSuccess : function ( ) {
var result = true , args = arguments ;
Ext . Array . each ( F . util . _beforeAjaxSuccessList , function ( item , index ) {
if ( item . apply ( window , args ) === false ) {
result = false ;
}
2015-05-19 14:45:47 +08:00
} ) ;
2016-01-10 01:19:30 -05:00
return result ;
2015-05-19 14:45:47 +08:00
} ,
load : function ( callback ) {
F . util . _loadList . push ( callback ) ;
} ,
triggerLoad : function ( ) {
Ext . Array . each ( F . util . _loadList , function ( item , index ) {
2016-01-10 01:19:30 -05:00
item . apply ( window ) ;
2015-05-19 14:45:47 +08:00
} ) ;
} ,
setFState : function ( cmp , state ) {
if ( ! cmp || ! cmp [ 'f_state' ] ) {
return ;
}
var oldValue , newValue , el ;
// 如果state中包含CssClass, 也就是在服务器端修改了CssClass属性, 则需要首先删除原来的CssClass属性。
if ( typeof ( state [ 'CssClass' ] ) !== 'undefined' ) {
newValue = state [ 'CssClass' ] ;
oldValue = cmp [ 'f_state' ] [ 'CssClass' ] ;
if ( ! oldValue ) {
oldValue = cmp . initialConfig . cls ;
}
el = cmp . el ;
el . removeCls ( oldValue ) ;
el . addCls ( newValue ) ;
}
//if (typeof (state['FormItemClass']) !== 'undefined') {
// newValue = state['FormItemClass'];
// oldValue = cmp['f_state']['FormItemClass'];
// if (!oldValue) {
// oldValue = cmp.initialConfig.itemCls;
// }
// // Search for max 10 depth.
// el = cmp.el.findParent('.x-form-item', 10, true);
// el.removeCls(oldValue);
// el.addCls(newValue);
//}
Ext . apply ( cmp [ 'f_state' ] , state ) ;
} ,
stopEventPropagation : function ( event ) {
event = event || window . event ;
if ( typeof ( event . cancelBubble ) === 'boolean' ) {
event . cancelBubble = true ;
} else {
event . stopPropagation ( ) ;
}
} ,
// 绑定函数的上下文
bind : function ( fn , scope ) {
return function ( ) {
return fn . apply ( scope , arguments ) ;
} ;
} ,
// 在页面上查找id为findId的节点, 替换成replaceHtml
replace : function ( findId , replaceHtml ) {
// 在findId外面添加一个DIV层, 然后更新此wrapper的InnerHTML
var findedControl = Ext . get ( findId ) ;
if ( findedControl ) {
var wrapper = findedControl . wrap ( ) . update ( replaceHtml ) ;
// 将新增的节点移到wrapper上面
wrapper . first ( ) . insertBefore ( wrapper ) ;
// 然后删除wrapper
wrapper . remove ( ) ;
}
} ,
// 隐藏PageLoading节点
hidePageLoading : function ( ) {
/ *
if ( fadeOut ) {
Ext . get ( "loading" ) . remove ( ) ;
Ext . get ( "loading-mask" ) . fadeOut ( { remove : true } ) ;
}
else {
Ext . get ( "loading" ) . remove ( ) ;
Ext . get ( "loading-mask" ) . remove ( ) ;
}
* /
Ext . get ( "loading" ) . hide ( ) ;
Ext . get ( "loading-mask" ) . hide ( ) ;
} ,
// 去掉字符串中的html标签
stripHtmlTags : function ( str ) {
return str . replace ( /<[^>]*>/g , "" ) ;
} ,
2016-01-10 01:19:30 -05:00
2015-05-19 14:45:47 +08:00
// 向页面添加Loading...节点
appendLoadingNode : function ( ) {
return F . util . appendFormNode ( { tag : 'div' , id : 'f_ajax_loading' , cls : 'f-ajax-loading' , html : F . util . loading } ) ;
} ,
// 向页面的 form 节点最后添加新的节点
appendFormNode : function ( htmlOrObj ) {
return Ext . DomHelper . append ( document . forms [ 0 ] , htmlOrObj ) ;
} ,
// 向页面添加一个隐藏字段,如果已经存在则更新值
setHiddenFieldValue : function ( fieldId , fieldValue ) {
var itemNode = Ext . get ( fieldId ) ;
if ( ! itemNode ) {
// Ext.DomHelper.append 有问题,例如下面这个例子得到的结果是错的;变通一下,先插入节点,在设置节点的值。
// Ext.DomHelper.append(document.forms[0], { tag: "input", type: "hidden", value: '{"X_Items":[["Value1","可选项1",1],["Value2","可选项2( 不可选择) ",0],["Value3","可选项3( 不可选择) ",0],["Value4","可选项4",1],["Value5","可选项5",1],["Value6","可选项6",1],["Value7","可选择项7",1],["Value8","可选择项8",1],["Value9","可选择项9",1]],"SelectedValue":"Value1"}'});
// 上面的这个字符串, 在IETest的IE8模式下会变成:
// {"DropDownList1":{"X_Items":[["Value1","\u9009\u9879 1",1],["Value2","\u9009\u9879 2\uff08\u4e0d\u53ef\u9009\u62e9\uff09",0],["Value3","\u9009\u9879 3\uff08\u4e0d\u53ef\u9009\u62e9\uff09",0],["Value4","\u9009\u9879 4",1],["Value5","\u9009\u9879 5",1],["Value6","\u9009\u9879 6",1],["Value7","\u9009\u9879 7",1],["Value8","\u9009\u9879 8",1],["Value9","\u9009\u9879 9",1]],"SelectedValue":"Value1"}}
F . util . appendFormNode ( { tag : "input" , type : "hidden" , id : fieldId , name : fieldId } ) ;
Ext . get ( fieldId ) . dom . value = fieldValue ;
}
else {
itemNode . dom . value = fieldValue ;
}
} ,
// 从表单中删除隐藏字段
removeHiddenField : function ( fieldId ) {
var itemNode = Ext . get ( fieldId ) ;
if ( itemNode ) {
itemNode . remove ( ) ;
}
} ,
// 获取页面中一个隐藏字段的值
getHiddenFieldValue : function ( fieldId ) {
var itemNode = Ext . get ( fieldId ) ;
if ( itemNode ) {
return itemNode . getValue ( ) ;
}
return null ;
} ,
// 禁用提交按钮(在回发之前禁用以防止重复提交)
disableSubmitControl : function ( controlClientID ) {
F ( controlClientID ) . disable ( ) ;
F . util . setHiddenFieldValue ( 'F_TARGET' , controlClientID ) ;
} ,
// 启用提交按钮(在回发之后启用提交按钮)
enableSubmitControl : function ( controlClientID ) {
F ( controlClientID ) . enable ( ) ;
F . util . setHiddenFieldValue ( 'F_TARGET' , '' ) ;
} ,
/ *
// 更新ViewState的值
updateViewState : function ( newValue , startIndex , gzipped ) {
if ( typeof ( startIndex ) === 'boolean' ) {
gzipped = startIndex ;
startIndex = - 1 ;
}
var viewStateHiddenFiledID = "__VIEWSTATE" ;
if ( gzipped ) {
viewStateHiddenFiledID = "__VIEWSTATE_GZ" ;
}
var oldValue = F . util . getHiddenFieldValue ( viewStateHiddenFiledID ) ;
if ( Ext . type ( startIndex ) == "number" && startIndex > 0 ) {
if ( startIndex < oldValue . length ) {
oldValue = oldValue . substr ( 0 , startIndex ) ;
}
} else {
// Added on 2011-5-2, this is a horrible mistake.
oldValue = '' ;
}
F . util . setHiddenFieldValue ( viewStateHiddenFiledID , oldValue + newValue ) ;
} ,
// 更新EventValidation的值
updateEventValidation : function ( newValue ) {
F . util . setHiddenFieldValue ( "__EVENTVALIDATION" , newValue ) ;
} ,
* /
// 设置页面状态是否改变
setPageStateChanged : function ( changed ) {
var pageState = Ext . get ( "F_CHANGED" ) ;
if ( pageState ) {
pageState . dom . value = changed ;
}
} ,
// 页面状态是否改变
isPageStateChanged : function ( ) {
var pageState = Ext . get ( "F_CHANGED" ) ;
if ( pageState && pageState . getValue ( ) == "true" ) {
return true ;
}
return false ;
} ,
// 阻止页面关闭( 页面中iframe内的表单已改变, 或者页面中iframe定义了beforeunload)
preventPageClose : function ( el ) {
var me = this ;
// 是否阻止关闭
var preventClose = false ;
var iframeEls ;
if ( el ) {
iframeEls = el . select ( 'iframe' ) ;
} else {
iframeEls = Ext . select ( 'iframe' ) ;
}
iframeEls . each ( function ( iframeEl ) {
var iframeWnd = iframeEl . dom . contentWindow ;
2016-01-10 01:19:30 -05:00
if ( ! F . canAccess ( iframeWnd ) ) {
2015-05-19 14:45:47 +08:00
return true ; // continue
}
if ( iframeWnd && iframeWnd . F ) {
var iframeF = iframeWnd . F ;
// 启用表单改变确认对话框 并且 表单已改变
if ( iframeF . formChangeConfirm && iframeF . util . formChanged ( ) ) {
// 阻止关闭当前面板
if ( ! window . confirm ( F . wnd . formChangeConfirmMsg ) ) {
preventClose = true ;
return false ; // break
} else {
// 没有阻止,不要在触发 $(window).beforeunload 事件了
iframeF . beforeunloadCheck = false ;
}
}
/ *
// 是否自定义了 beforeunload 事件
var beforeunloadCallbacks = iframeF . util . _fjs _getEvent ( 'beforeunload' ) ;
if ( beforeunloadCallbacks ) {
for ( var i = 0 , count = beforeunloadCallbacks . length ; i < count ; i ++ ) {
var beforeunloadCallback = beforeunloadCallbacks [ i ] ;
var confirmMsg = beforeunloadCallback . apply ( iframeWnd ) ;
if ( confirmMsg ) {
// 阻止关闭当前面板
if ( ! window . confirm ( confirmMsg ) ) {
preventClose = true ;
return false ; // break
} else {
// 没有阻止,不要在触发 $(window).beforeunload 事件了
iframeF . beforeunloadCheck = false ;
}
}
}
}
* /
// 子页面是否阻止关闭
var childrenPreventClose = iframeF . util . preventPageClose ( ) ;
if ( childrenPreventClose ) {
// 被子页面阻止了,则恢复父页面的 beforeunloadCheck 标识
iframeF . beforeunloadCheck = true ;
preventClose = true ;
return false ; // break
}
}
} ) ;
return preventClose ;
} ,
// 页面中表单字段是否改变
formChanged : function ( ) {
var changed = false ;
resolveRenderToObj ( function ( obj ) {
if ( obj . isXType ( 'container' ) && obj . f _isDirty ( ) ) {
changed = true ;
return false ; // break
}
} ) ;
return changed ;
} ,
// 验证多个表单,返回数组[是否验证通过,第一个不通过的表单字段]
validForms : function ( forms , targetName , showBox ) {
var target = F . util . getTargetWindow ( targetName ) ;
var valid = true ;
var firstInvalidField = null ;
for ( var i = 0 ; i < forms . length ; i ++ ) {
var result = F ( forms [ i ] ) . f _isValid ( ) ;
if ( ! result [ 0 ] ) {
valid = false ;
if ( firstInvalidField == null ) {
firstInvalidField = result [ 1 ] ;
}
}
}
if ( ! valid ) {
if ( showBox ) {
var alertMsg = Ext . String . format ( F . util . formAlertMsg , firstInvalidField . fieldLabel ) ;
target . F . util . alert ( alertMsg , F . util . formAlertTitle , Ext . MessageBox . INFO ) ;
}
return false ;
}
return true ;
} ,
// 判断隐藏字段值( 数组) 是否包含value
isHiddenFieldContains : function ( domId , testValue ) {
testValue += "" ;
var domValue = Ext . get ( domId ) . dom . value ;
if ( domValue === "" ) {
//console.log(domId);
return false ;
}
else {
var sourceArray = domValue . split ( "," ) ;
return Ext . Array . indexOf ( sourceArray , testValue ) >= 0 ? true : false ;
}
} ,
// 将一个字符添加到字符列表中, 将2添加到[5,3,4]
addValueToHiddenField : function ( domId , addValue ) {
addValue += "" ;
var domValue = Ext . get ( domId ) . dom . value ;
if ( domValue == "" ) {
Ext . get ( domId ) . dom . value = addValue + "" ;
}
else {
var sourceArray = domValue . split ( "," ) ;
if ( Ext . Array . indexOf ( sourceArray , addValue ) < 0 ) {
sourceArray . push ( addValue ) ;
Ext . get ( domId ) . dom . value = sourceArray . join ( "," ) ;
}
}
} ,
// 从字符列表中移除一个字符, 将2从dom的值"5,3,4,2"移除
removeValueFromHiddenField : function ( domId , addValue ) {
addValue += "" ;
var domValue = Ext . get ( domId ) . dom . value ;
if ( domValue != "" ) {
var sourceArray = domValue . split ( "," ) ;
if ( Ext . Array . indexOf ( sourceArray , addValue ) >= 0 ) {
sourceArray = sourceArray . remove ( addValue ) ;
Ext . get ( domId ) . dom . value = sourceArray . join ( "," ) ;
}
}
} ,
// 取得隐藏字段的值
getHiddenFieldValue : function ( fieldId ) {
var itemNode = Ext . get ( fieldId ) ;
if ( ! itemNode ) {
return "" ;
}
else {
return itemNode . dom . value ;
}
} ,
// 取得表单字段的值
getFormFieldValue : function ( cmp ) {
if ( typeof ( cmp ) === 'string' ) {
cmp = F ( cmp ) ;
}
var value = cmp . getValue ( ) ;
if ( cmp . isXType ( 'displayfield' ) ) {
value = value . replace ( /<\/?span[^>]*>/ig , '' ) ;
}
return value ;
} ,
// 由target获取window对象
getTargetWindow : function ( target ) {
var wnd = window ;
if ( target === '_self' ) {
wnd = window ;
} else if ( target === '_parent' ) {
wnd = parent ;
} else if ( target === '_top' ) {
wnd = top ;
}
return wnd ;
} ,
// 预加载图片
preloadImages : function ( images ) {
var imageInstance = [ ] ;
for ( var i = 0 ; i < images . length ; i ++ ) {
imageInstance [ i ] = new Image ( ) ;
imageInstance [ i ] . src = images [ i ] ;
}
} ,
hasCSS : function ( id ) {
return ! ! Ext . get ( id ) ;
} ,
addCSS : function ( id , content , isCSSFile ) {
// 如果此节点已经存在,则先删除此节点
var node = Ext . get ( id ) ;
if ( node ) {
Ext . removeNode ( node . dom ) ;
}
2016-01-10 01:19:30 -05:00
/ *
2015-05-19 14:45:47 +08:00
var ss1 ;
if ( isCSSFile ) {
ss1 = document . createElement ( 'link' ) ;
ss1 . setAttribute ( 'type' , 'text/css' ) ;
ss1 . setAttribute ( 'rel' , 'stylesheet' ) ;
ss1 . setAttribute ( 'id' , id ) ;
ss1 . setAttribute ( 'href' , content ) ;
} else {
// Tricks From: http://www.phpied.com/dynamic-script-and-style-elements-in-ie/
ss1 = document . createElement ( "style" ) ;
ss1 . setAttribute ( "type" , "text/css" ) ;
ss1 . setAttribute ( "id" , id ) ;
if ( ss1 . styleSheet ) { // IE
ss1 . styleSheet . cssText = content ;
} else { // the world
var tt1 = document . createTextNode ( content ) ;
ss1 . appendChild ( tt1 ) ;
}
}
var hh1 = document . getElementsByTagName ( "head" ) [ 0 ] ;
hh1 . appendChild ( ss1 ) ;
2016-01-10 01:19:30 -05:00
* /
var ss1 ;
var hh1 = document . getElementsByTagName ( 'head' ) [ 0 ] ;
if ( isCSSFile ) {
ss1 = document . createElement ( 'link' ) ;
//ss1.setAttribute('type', 'text/css');
ss1 . setAttribute ( 'rel' , 'stylesheet' ) ;
ss1 . setAttribute ( 'id' , id ) ;
ss1 . setAttribute ( 'href' , content ) ;
hh1 . appendChild ( ss1 ) ;
} else {
// Tricks From: http://www.phpied.com/dynamic-script-and-style-elements-in-ie/
ss1 = document . createElement ( 'style' ) ;
//ss1.setAttribute('type', 'text/css');
ss1 . setAttribute ( 'id' , id ) ;
// Update: note that it's important for IE that you append the style to the head *before* setting its content. Otherwise IE678 will *crash* is the css string contains an @import.
hh1 . appendChild ( ss1 ) ;
if ( ss1 . styleSheet ) { // IE
ss1 . styleSheet . cssText = content ;
} else { // the world
var tt1 = document . createTextNode ( content ) ;
ss1 . appendChild ( tt1 ) ;
}
}
2015-05-19 14:45:47 +08:00
} ,
/ *
// 在启用AJAX的情况下, 使所有的Asp.net的提交按钮( type="submit") 不要响应默认的submit行为, 而是自定义的AJAX
makeAspnetSubmitButtonAjax : function ( buttonId ) {
// 低版本IE浏览器不允许使用JS修改input标签的type属性, 导致此函数无效
function resetButton ( button ) {
button . set ( { "type" : "button" } ) ;
button . addListener ( "click" , function ( event , el ) {
_ _doPostBack ( el . getAttribute ( "name" ) , "" ) ;
event . stopEvent ( ) ;
} ) ;
}
if ( typeof ( buttonId ) === "undefined" ) {
Ext . Array . each ( Ext . DomQuery . select ( "input[type=submit]" ) , function ( item , index ) {
resetButton ( Ext . get ( item ) ) ;
} ) ;
} else {
var button = Ext . get ( buttonId ) ;
if ( button . getAttribute ( "type" ) === "submit" ) {
resetButton ( button ) ;
}
}
} ,
* /
htmlEncode : function ( str ) {
var div = document . createElement ( "div" ) ;
div . appendChild ( document . createTextNode ( str ) ) ;
return div . innerHTML ;
} ,
htmlDecode : function ( str ) {
var div = document . createElement ( "div" ) ;
div . innerHTML = str ;
return div . innerHTML ;
} ,
// Whether a object is empty (With no property) or not.
// 可以使用 Ext.Object.isEmpty
isObjectEmpty : function ( obj ) {
for ( var prop in obj ) {
if ( obj . hasOwnProperty ( prop ) ) {
return false ;
}
}
return true ;
} ,
// Convert an array to object.
// ['Text', 'Icon'] -> {'Text':true, 'Icon': true}
arrayToObject : function ( arr ) {
var obj = { } ;
Ext . Array . each ( arr , function ( item , index ) {
obj [ item ] = true ;
} ) ;
return obj ;
} ,
hideScrollbar : function ( ) {
if ( Ext . isIE ) {
window . document . body . scroll = 'no' ;
} else {
window . document . body . style . overflow = 'hidden' ;
}
} ,
// 动态添加一个标签页
// mainTabStrip: 选项卡实例
// id: 选项卡ID
// url: 选项卡IFrame地址
// text: 选项卡标题
// icon: 选项卡图标
// addTabCallback: 创建选项卡前的回调函数( 接受tabConfig参数)
// refreshWhenExist: 添加选项卡时, 如果选项卡已经存在, 是否刷新内部IFrame
addMainTab : function ( mainTabStrip , id , url , text , icon , createToolbar , refreshWhenExist ) {
var iconId , iconCss , tabId , currentTab , tabConfig ;
// 兼容 addMainTab(mainTabStrip, treeNode, addTabCallback, refreshWhenExist) 调用方式
if ( typeof ( id ) !== 'string' ) {
refreshWhenExist = text ;
createToolbar = url ;
url = id . data . href ;
icon = id . data . icon ;
text = id . data . text ;
id = id . getId ( ) ;
}
//var href = node.attributes.href;
if ( icon ) {
iconId = icon . replace ( /\W/ig , '_' ) ;
if ( ! F . util . hasCSS ( iconId ) ) {
iconCss = [ ] ;
iconCss . push ( '.' ) ;
iconCss . push ( iconId ) ;
iconCss . push ( '{background-image:url("' ) ;
iconCss . push ( icon ) ;
iconCss . push ( '")}' ) ;
F . util . addCSS ( iconId , iconCss . join ( '' ) ) ;
}
}
// 动态添加一个带工具栏的标签页
//tabId = 'dynamic_added_tab' + id.replace('__', '-');
currentTab = mainTabStrip . getTab ( id ) ;
if ( ! currentTab ) {
tabConfig = {
'id' : id ,
'url' : url ,
'title' : text ,
'closable' : true ,
'bodyStyle' : 'padding:0px;'
} ;
if ( icon ) {
tabConfig [ 'iconCls' ] = iconId ;
}
if ( createToolbar ) {
var addTabCallbackResult = createToolbar . apply ( window , [ tabConfig ] ) ;
// 兼容之前的方法,函数返回值如果不为空,则将返回值作为顶部工具条实例
if ( addTabCallbackResult ) {
tabConfig [ 'tbar' ] = addTabCallbackResult ;
}
}
mainTabStrip . addTab ( tabConfig ) ;
} else {
mainTabStrip . setActiveTab ( currentTab ) ;
currentTab . setTitle ( text ) ;
if ( icon ) {
currentTab . setIconCls ( iconId ) ;
}
if ( refreshWhenExist ) {
var iframeNode = currentTab . body . query ( 'iframe' ) [ 0 ] ;
if ( iframeNode ) {
if ( url ) {
iframeNode . contentWindow . location . href = url ;
} else {
iframeNode . contentWindow . location . reload ( ) ;
}
}
}
}
} ,
// 初始化左侧树(或者手风琴+树)与右侧选项卡控件的交互
// treeMenu: 主框架中的树控件实例,或者内嵌树控件的手风琴控件实例
// mainTabStrip: 选项卡实例
// createToolbar: 创建选项卡前的回调函数( 接受tabConfig参数)
// updateLocationHash: 切换Tab时, 是否更新地址栏Hash值
// refreshWhenExist: 添加选项卡时, 如果选项卡已经存在, 是否刷新内部IFrame
// refreshWhenTabChange: 切换选项卡时, 是否刷新内部IFrame
// hashWindow: 需要更新Hash值的窗口对象, 默认为当前window
initTreeTabStrip : function ( treeMenu , mainTabStrip , createToolbar , updateLocationHash , refreshWhenExist , refreshWhenTabChange , hashWindow ) {
if ( ! hashWindow ) {
hashWindow = window ;
}
// 注册树的节点点击事件
function registerTreeClickEvent ( treeInstance ) {
treeInstance . on ( 'itemclick' , function ( view , record , item , index , event ) {
var href = record . data . href ;
// record.isLeaf()
// 不管当前节点是否子节点,只要有 href 属性, 都需要打开一个新Tab
if ( href ) {
// 阻止事件传播
event . stopEvent ( ) ;
if ( updateLocationHash ) {
// 修改地址栏
hashWindow . location . hash = '#' + href ;
}
// 新增Tab节点
F . util . addMainTab ( mainTabStrip , record , createToolbar , refreshWhenExist ) ;
}
} ) ;
}
// treeMenu可能是Accordion或者Tree
if ( treeMenu . getXType ( ) === 'panel' ) {
treeMenu . items . each ( function ( item ) {
var tree = item . items . getAt ( 0 ) ;
if ( tree && tree . getXType ( ) === 'treepanel' ) {
registerTreeClickEvent ( tree ) ;
}
} ) ;
} else if ( treeMenu . getXType ( ) === 'treepanel' ) {
registerTreeClickEvent ( treeMenu ) ;
}
// 切换主窗口的Tab
mainTabStrip . on ( 'tabchange' , function ( tabStrip , tab ) {
var tabHash = '#' + ( tab . url || '' ) ;
// 只有当浏览器地址栏的Hash值和将要改变的不一样时, 才进行如下两步处理:
// 1. 更新地址栏Hash值
// 2. 刷新Tab内的IFrame
if ( tabHash !== hashWindow . location . hash ) {
if ( updateLocationHash ) {
hashWindow . location . hash = tabHash ;
}
if ( refreshWhenTabChange ) {
var iframeNode = tab . body . query ( 'iframe' ) [ 0 ] ;
if ( iframeNode ) {
var currentLocationHref = iframeNode . contentWindow . location . href ;
if ( /^http(s?):\/\// . test ( currentLocationHref ) ) {
iframeNode . contentWindow . location . reload ( ) ;
}
}
}
}
} ) ;
// 页面第一次加载时, 根据URL地址在主窗口加载页面
var HASH = hashWindow . location . hash . substr ( 1 ) ;
if ( HASH ) {
var FOUND = false ;
function initTreeMenu ( treeInstance , node ) {
var i , currentNode , nodes , node , path ;
if ( ! FOUND && node . hasChildNodes ( ) ) {
nodes = node . childNodes ;
for ( i = 0 ; i < nodes . length ; i ++ ) {
currentNode = nodes [ i ] ;
if ( currentNode . isLeaf ( ) ) {
if ( currentNode . data . href === HASH ) {
path = currentNode . getPath ( ) ;
treeInstance . expandPath ( path ) ; //node.expand();
treeInstance . selectPath ( path ) ; // currentNode.select();
F . util . addMainTab ( mainTabStrip , currentNode , createToolbar ) ;
FOUND = true ;
return ;
}
} else {
arguments . callee ( treeInstance , currentNode ) ;
}
}
}
}
if ( treeMenu . getXType ( ) === 'panel' ) {
treeMenu . items . each ( function ( item ) {
var tree = item . items . getAt ( 0 ) ;
if ( tree && tree . getXType ( ) === 'treepanel' ) {
initTreeMenu ( tree , tree . getRootNode ( ) ) ;
// 找到树节点
if ( FOUND ) {
item . expand ( ) ;
return false ;
}
}
} ) ;
} else if ( treeMenu . getXType ( ) === 'treepanel' ) {
initTreeMenu ( treeMenu , treeMenu . getRootNode ( ) ) ;
}
}
} ,
// 复选框分组处理
resolveCheckBoxGroup : function ( name , xstateContainer , isradiogroup ) {
var items = [ ] , i , count , xitem , xitemvalue , xitems , xselectedarray , xselected , xchecked , xitemname ;
xitems = xstateContainer . F _Items ;
xselectedarray = xstateContainer . SelectedValueArray ;
xselected = xstateContainer . SelectedValue ;
if ( xitems && xitems . length > 0 ) {
for ( i = 0 , count = xitems . length ; i < count ; i ++ ) {
xitem = xitems [ i ] ;
xitemvalue = xitem [ 1 ] ;
xchecked = false ;
if ( ! isradiogroup ) {
// xselectedarray 可能是undefined, [], ["value1", "value2"]
if ( xselectedarray ) {
xchecked = ( Ext . Array . indexOf ( xselectedarray , xitemvalue ) >= 0 ) ? true : false ;
}
xitemname = name + '_' + i ;
} else {
xchecked = ( xselected === xitemvalue ) ? true : false ;
xitemname = name ;
}
items . push ( {
'inputValue' : xitemvalue ,
'boxLabel' : xitem [ 0 ] ,
'name' : xitemname ,
'checked' : xchecked
} ) ;
}
}
/ *
else {
items . push ( {
'inputValue' : "tobedeleted" ,
'boxLabel' : " " ,
'name' : "tobedeleted"
} ) ;
}
* /
return items ;
} ,
// 防止在短时间内, 同一GroupName的单选框触发两次事件
// 用于 MenuCheckBox 和 RadioButton
checkGroupLastTime : function ( groupName ) {
var checkName = groupName + '_lastupdatetime' ;
var checkValue = F . util [ checkName ] ;
F . util [ checkName ] = new Date ( ) ;
if ( typeof ( checkValue ) === 'undefined' ) {
return true ;
} else {
if ( ( new Date ( ) - checkValue ) < 100 ) {
return false ;
} else {
return true ;
}
}
} ,
// 对话框图标
getMessageBoxIcon : function ( iconShortName ) {
2016-01-10 01:19:30 -05:00
var icon = iconShortName || Ext . MessageBox . WARNING ;
2015-05-19 14:45:47 +08:00
if ( iconShortName === 'info' ) {
icon = Ext . MessageBox . INFO ;
} else if ( iconShortName === 'warning' ) {
icon = Ext . MessageBox . WARNING ;
} else if ( iconShortName === 'question' ) {
icon = Ext . MessageBox . QUESTION ;
} else if ( iconShortName === 'error' ) {
icon = Ext . MessageBox . ERROR ;
}
return icon ;
} ,
2016-01-10 01:19:30 -05:00
// 弹出Alert对话框
alert : function ( target , message , title , messageIcon , ok ) { // 老的顺序: msg, title, icon, okscript
var args = [ ] . slice . call ( arguments , 0 ) ;
var options = args [ 0 ] ;
if ( typeof ( options ) === 'string' ) {
if ( ! /^_self|_parent|_top$/ . test ( args [ 0 ] ) ) {
args . splice ( 0 , 0 , '_self' ) ;
}
options = {
target : args [ 0 ] ,
message : args [ 1 ] ,
title : args [ 2 ] ,
messageIcon : args [ 3 ] ,
ok : args [ 4 ]
} ;
}
var wnd = F . util . getTargetWindow ( options . target ) ;
if ( ! F . canAccess ( wnd ) ) {
return ; // return
}
var icon = Ext . MessageBox . INFO ;
if ( options . messageIcon ) {
icon = F . util . getMessageBoxIcon ( options . messageIcon ) ;
}
wnd . Ext . MessageBox . show ( {
cls : options . cls || '' ,
title : options . title || F . util . alertTitle ,
msg : options . message ,
buttons : Ext . MessageBox . OK ,
icon : icon ,
fn : function ( buttonId ) {
if ( buttonId === "ok" ) {
if ( typeof ( options . ok ) === "function" ) {
options . ok . call ( window ) ;
}
}
}
} ) ;
} ,
2015-05-19 14:45:47 +08:00
// 确认对话框
2016-01-10 01:19:30 -05:00
confirm : function ( target , message , title , messageIcon , ok , cancel ) { // 老的顺序: targetName, title, msg, okScript, cancelScript, iconShortName)
var args = [ ] . slice . call ( arguments , 0 ) ; //$.makeArray(arguments);
var options = args [ 0 ] ;
if ( typeof ( options ) === 'string' ) {
if ( ! /^_self|_parent|_top$/ . test ( args [ 0 ] ) ) {
args . splice ( 0 , 0 , '_self' ) ;
}
options = {
target : args [ 0 ] ,
message : args [ 1 ] ,
title : args [ 2 ] ,
messageIcon : args [ 3 ] ,
ok : args [ 4 ] ,
cancel : args [ 5 ]
} ;
}
var wnd = F . util . getTargetWindow ( options . target ) ;
if ( ! F . canAccess ( wnd ) ) {
return ; // return
}
var icon = F . util . getMessageBoxIcon ( options . messageIcon ) ;
2015-05-19 14:45:47 +08:00
wnd . Ext . MessageBox . show ( {
2016-01-10 01:19:30 -05:00
cls : options . cls || '' ,
title : options . title || F . util . confirmTitle ,
msg : options . message ,
2015-05-19 14:45:47 +08:00
buttons : Ext . MessageBox . OKCANCEL ,
icon : icon ,
fn : function ( btn ) {
if ( btn == 'cancel' ) {
2016-01-10 01:19:30 -05:00
if ( options . cancel ) {
if ( typeof ( options . cancel ) === 'string' ) {
new Function ( options . cancel ) ( ) ;
2015-05-19 14:45:47 +08:00
} else {
2016-01-10 01:19:30 -05:00
options . cancel . apply ( wnd ) ;
2015-05-19 14:45:47 +08:00
}
} else {
return false ;
}
} else {
2016-01-10 01:19:30 -05:00
if ( options . ok ) {
if ( typeof ( options . ok ) === 'string' ) {
new Function ( options . ok ) ( ) ;
2015-05-19 14:45:47 +08:00
} else {
2016-01-10 01:19:30 -05:00
options . ok . apply ( wnd ) ;
2015-05-19 14:45:47 +08:00
}
} else {
return false ;
}
}
}
} ) ;
} ,
summaryType : function ( gridId ) {
return function ( records , dataIndex ) {
var summary = F ( gridId ) . f _state [ 'SummaryData' ] ;
if ( summary ) {
var value = summary [ dataIndex ] ;
if ( typeof ( value ) !== 'undefined' ) {
return value ;
}
}
return '' ;
} ;
} ,
// 表单字段内按回车键触发提交按钮
registerPanelEnterKey : function ( panel ) {
if ( F . submitbutton ) {
Ext . create ( 'Ext.util.KeyNav' , panel . el , {
enter : function ( e ) {
var el = Ext . Element . getActiveElement ( ) ;
if ( el . type !== 'textarea' ) {
F ( F . submitbutton ) . el . dom . click ( ) ;
}
} ,
scope : panel
} ) ;
}
} ,
reset : function ( ) {
Ext . ComponentManager . each ( function ( key , cmp ) {
if ( cmp . isXType && cmp . isXType ( 'panel' ) && cmp . renderTo ) {
cmp . f _reset ( ) ;
}
} ) ;
} ,
isDate : function ( value ) {
return Object . prototype . toString . call ( value ) === '[object Date]' ;
} ,
resolveGridDateToString : function ( fields , fieldName , fieldValue ) {
var i , fieldConfig , result = fieldValue ;
for ( i = 0 , count = fields . length ; i < count ; i ++ ) {
fieldConfig = fields [ i ] ;
if ( fieldConfig . name === fieldName && fieldConfig . type === 'date' && fieldConfig . dateFormat ) {
result = Ext . util . Format . date ( fieldValue , fieldConfig . dateFormat ) ;
}
}
return result ;
} ,
2016-01-10 01:19:30 -05:00
2015-05-19 14:45:47 +08:00
noop : function ( ) { }
} ;
} ) ( ) ;