六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 214|回复: 0

eventManager.htc

[复制链接]

升级  71.33%

43

主题

43

主题

43

主题

秀才

Rank: 2

积分
157
 楼主| 发表于 2013-2-8 00:01:47 | 显示全部楼层 |阅读模式
<!-- ---------------------------------------------------------------------////  Copyright 2001 Chordiant Software.  All Rights Reserved.////  File:         eventmanager.htc////Auther:Ryan Carroll//Created:13/11/2001////  Description:  Implements a manager registering and dispatching events////Changes log://-------------------------------------------------------------------- --><PUBLIC:COMPONENT tagname="eventmanager" lightWeight="true"><!-- Public Properties -->    <!-- Public Methods -->    <METHOD   NAME="registerEvents"    /><METHOD   NAME="dispatch"      /><METHOD   NAME="unregisterWindow"/><METHOD   NAME="unregisterEvent"    /><!-- Public Events -->    <EVENT    NAME="onError"        ID="error"  />    <!-- Private Event Listeners --><ATTACH   EVENT="ondocumentready" HANDLER="setDefaults" />// { start - performance fix<ATTACH   EVENT="ondetach"            HANDLER="cleanUp"       />// } end - performance fix</PUBLIC:COMPONENT><SCRIPT LANGUAGE="jscript">//+----------------------------------------------------------------------------////  Global Variables////-----------------------------------------------------------------------------var registeredEvents = new Array();function registeredEventObject(sEventName){this.eventName = sEventName;this.eventHandlers = new Array();}function registeredEventHandlerObject(sEventHandlerFunction, oWindow){this.eventHandlerFunction = sEventHandlerFunction;this.window = oWindow;}//////////////////////////////////////////////////////////////////////////////////Methods Section        // //////////////////////////////////////////////////////////////////////////////////+----------------------------------------------------------------------------////  Public Methods////-----------------------------------------------------------------------------//+----------------------------------------------------------------------------////  Function:       registerEvents////  Description:    ////  Arguments:      sMsg - descriptive text message////  Returns:        nothing////-----------------------------------------------------------------------------function registerEvents(oEventRegistration, oWindow) {var oEvents;var oRegisterEventNodeList;var sEventName;var sEventHandler;var sEventHandlerScriptFile;var oSelectedRegisterEventNode;var oRegisterEventNodeList;var oNewEventScriptFile;try {oEvents = new ActiveXObject("Msxml.DOMDocument");    if((typeof oEventRegistration) == "string") {    oEvents.loadXML(oEventRegistration);    } else {    oEvents.loadXML(oEventRegistration.xml);    }        oRegisterEventNodeList = oEvents.selectNodes(".//registerevent");    for (var i=0; i < oRegisterEventNodeList.length; i++) {    oSelectedRegisterEventNode = oRegisterEventNodeList.item(i);    if(oSelectedRegisterEventNode.selectSingleNode("eventname") != null){    sEventName = oSelectedRegisterEventNode.selectSingleNode("eventname").text;    }    if(oSelectedRegisterEventNode.selectSingleNode("eventhandlerfunction") != null){    sEventHandler = oSelectedRegisterEventNode.selectSingleNode("eventhandlerfunction").text;    }    if(oSelectedRegisterEventNode.selectSingleNode("eventhandlerscriptfilename") != null){    sEventHandlerScriptFile = oSelectedRegisterEventNode.selectSingleNode("eventhandlerscriptfilename").text;    }        if( sEventHandlerScriptFile != null && sEventHandlerScriptFile != "") {    oNewEventScriptFile = oWindow.document.createElement("<script language=javascript src='"+sEventHandlerScriptFile+"'><\/script>")    oWindow.document.body.appendChild(oNewEventScriptFile);    }        addRegisteredEvent(sEventName, sEventHandler, oWindow);        }} catch(e) {  returnError(e.toString());} finally {  oEventRegistration = null;oWindow = null;oEvents = null;oRegisterEventNodeList = null;sEventName = null;sEventHandler = null;sEventHandlerScriptFile = null;oSelectedRegisterEventNode = null;oRegisterEventNodeList = null;oNewEventScriptFile = null;}}//+----------------------------------------------------------------------------////  Function:       unregisterWindow////  Description:    ////  Arguments:      sMsg - descriptive text message////  Returns:        nothing////-----------------------------------------------------------------------------function unregisterWindow( oWindow ) {var oRegisteredEvent;try {    for(var i=0; i < registeredEvents.length; i++){    oRegisteredEvent = registeredEvents[i];    for(var j=oRegisteredEvent.eventHandlers.length - 1; j >= 0; j--){    if(oRegisteredEvent.eventHandlers[j].window == oWindow){    oRegisteredEvent.eventHandlers[j]=null;    oRegisteredEvent.eventHandlers.splice(j,1);    }    }    }} catch(e) {  returnError(e.toString());} finally {  oRegisteredEvent = null;oWindow = null;}}//+----------------------------------------------------------------------------////  Function:       unregisterEvent////  Description:    ////  Arguments:      sMsg - descriptive text message////  Returns:        nothing////-----------------------------------------------------------------------------function unregisterEvent( sEventName, oWindow ) {var oRegisteredEvent;try {    for(var i=0; i < registeredEvents.length; i++){    if(registeredEvents[i].eventName == sEventName){        oRegisteredEvent = registeredEvents[i];        for(var j=oRegisteredEvent.eventHandlers.length - 1; j >= 0; j--){        if(oRegisteredEvent.eventHandlers[j].window == oWindow){        oRegisteredEvent.eventHandlers.splice(j,1);        }        }    break;    }    }} catch(e) {  returnError(e.toString());} finally {  oRegisteredEvent = null;sEventName = null;oWindow = null;}}//+----------------------------------------------------------------------------////  Function:       dispatch////  Description:    ////  Arguments:      sMsg - descriptive text message////  Returns:        nothing////-----------------------------------------------------------------------------function dispatch( sEventName, oEventData ) {var oRegisteredEvent;var sEventHandlerFunction;var oEventHandlerWindow;try {    for(var i=0; i < registeredEvents.length; i++){    if(registeredEvents[i].eventName == sEventName){    oRegisteredEvent = registeredEvents[i];    break;    }    }        if(oRegisteredEvent != null){    for(var i=0; i < oRegisteredEvent.eventHandlers.length; i++){    oEventHandlerWindow = oRegisteredEvent.eventHandlers[i].window;    sEventHandlerFunction = oRegisteredEvent.eventHandlers[i].eventHandlerFunction;    if(oEventHandlerWindow != null && sEventHandlerFunction != null){    try {    oEventHandlerWindow.eval(sEventHandlerFunction)(oEventData);} catch(ex){//don't do anything, handling windows that no longer exist but were not properly deregistered}}    }    }} catch(e) {  returnError(e.toString());} finally {  oRegisteredEvent = null;sEventHandlerFunction = null;oEventHandlerWindow = null;sEventName = null;oEventData = null;}}//+----------------------------------------------------------------------------////  Private Methods////-----------------------------------------------------------------------------//+----------------------------------------------------------------------------////  Function:       addRegisteredEvent////  Description:    ////  Arguments:      sMsg - descriptive text message////  Returns:        nothing////-----------------------------------------------------------------------------function addRegisteredEvent(sEventName, sEventHandlerFunction, oWindow){var oRegisteredEvent;var oEventHandler;try {    //create new event handler object    oEventHandler = new registeredEventHandlerObject(sEventHandlerFunction, oWindow);        //search the registeredEvents collection to see if the event has already been registered    for(var i=0; i < registeredEvents.length; i++){    if(registeredEvents[i].eventName == sEventName){    oRegisteredEvent = registeredEvents[i];    break;    }    }        if(oRegisteredEvent == null){    oRegisteredEvent = new registeredEventObject(sEventName);    registeredEvents[registeredEvents.length] = oRegisteredEvent;    }         for(var i=0; i < oRegisteredEvent.eventHandlers.length; i++){    oSelectedEventHanlder = oRegisteredEvent.eventHandlers[i];    if(oSelectedEventHanlder.eventHandlerFunction == oEventHandler.eventHandlerFunction && oSelectedEventHanlder.window == oEventHandler.window ){    return;    }    }        oRegisteredEvent.eventHandlers[oRegisteredEvent.eventHandlers.length] = oEventHandler;} catch(e) {  returnError(e.toString());} finally {  oRegisteredEvent = null;oEventHandler = null;sEventName = null;sEventHandlerFunction = null;oWindow = null;}}//+----------------------------------------------------------------------------////  Function:       setDefaults////  Description:    Called during the initialization of the behavior.  Sets//                  the required default settings, and attaches the //                  onpropertychange event (not done in the header to prevent //                  firing the event during initialization).////  Arguments:      none////  Returns:        nothing////-----------------------------------------------------------------------------function setDefaults(){ if(element.document.media != "print") {//  Attach the onpropertychange eventattachEvent("onpropertychange", doPropChange);}// { start - performance fixwindow.attachEvent("onbeforeunload", cleanUp);// } end - performance fix}// { start - performance fixfunction cleanUp() {  try {        if(element.document.media != "print") {detachEvent("onpropertychange", doPropChange);}if (window)window.detachEvent("onbeforeunload", cleanUp);  } catch(e) {      returnError(e.toString());  } finally {    // Make sure all module variables are freed    registeredEvents = null;  }}// } end - performance fix//+----------------------------------------------------------------------------////  Function:       doPropChange////  Description:    Runs on the onpropertychange event and calls the necessary//                  functions to correctly handle the property that was just//                  changed.////  Arguments:      none////  Returns:        nothing////-----------------------------------------------------------------------------function doPropChange(){    var propertyName;try {propertyName = window.event.propertyName;        //  Handle CSS property changes by calling necessary functions, setting        //  variables, and/or setting styles        //        if (propertyName.substring(0,5) == "style")        {       // Handle Style changes           // switch(propertyName)           // {           //     case "style.zIndex"             :           //         break;                           // }        }        else        {            //            //  Detach the onpropertychange event to prevent it from firing while            //  the changes are handled            //            detachEvent("onpropertychange", doPropChange);                        // Handle Property changes            switch(propertyName)            {                //case "leftBoundary" :                //leftBoundary = parseInt(leftBoundary);                //setLeftBoundary(leftBoundary);                //    break;                                      default :                    returnError(propertyName + " not a valid property");                    break;            }                        //  Re-attach the onpropertychange event            attachEvent("onpropertychange", doPropChange);        }} catch(e) {  returnError(e.toString());} finally {  propertyName = null;}}//+----------------------------------------------------------------------------////  Function:       returnError////  Description:    Fires the error event, along with a descriptive text//                  message.////  Arguments:      sMsg - descriptive text message////  Returns:        nothing////-----------------------------------------------------------------------------function returnError(sMsg){var oEvent; try {        oEvent = createEventObject();        oEvent.setAttribute("error", sMsg);        error.fire(oEvent);    //alert(sMsg);} finally {  oEvent = null;sMsg = null;}}</SCRIPT>
页面引用及注册:
<IMPORT namespace="chordiant" implementation="/.../eventManager.htc" /><xml id="CaseSearchResultListEventHandlers"><events><registerevent><eventname>StopDisplayMessageReactivateHandler</eventname><eventhandlerfunction>stopDisplayMessageHandlerReactivate</eventhandlerfunction></registerevent></events></xml>function stopDisplayMessageHandlerReactivate(){     do something here.}注册:desktop.eventManager.registerEvents(CaseSearchResultListEventHandlers, window );top.advisorDesktop.eventManager.dispatch("StopDisplayMessageReactivateHandler", obj);
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表