0

Jiong

 3 years ago
source link: https://www.cnblogs.com/Jiong/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

  博客园 ::

首页 :: 博问 :: 闪存 ::

新随笔 ::

联系 ::

订阅

::

管理 ::

  6 随笔 :: 0 文章 :: 8 评论 :: 0 引用

2008年12月24日

我最近在做一个项目的时候,需要写一个javascript的类来对一个ActiveX控件进行封装。而ActiveX控件有它自己的事件以及事件参数,我先后用了“attachEvent”和“$addHandler”来订阅事件,但都有不同的问题,“attachEvent”订阅的事件能正常得到参数,但“this”不再是当前类的实例。而用“$addHandler”订阅的事件能“this”能正确的返回当前类的实例,但ActiveX控件传过来的参数丢失了,而只有一个“Sys.UI.DomEvent”实例的参数。

为了满足需求我就把“$addHandler”方法做了如下的修改,让其能实现“this”和ActiveX控件的事件参数都能正确的得到,并且也保留了“Sys.UI.DomEvent”这个实例的参数。

 1None.gif
 2ExpandedBlockStart.gifContractedBlock.gifvar $addHandler = Sys.UI.DomEvent.addHandler = function Sys$UI$DomEvent$addHandler(element, eventName, handler) {
 3InBlock.gif    /// <summary locid="M:J#Sys.UI.DomEvent.addHandler" />
 4InBlock.gif    /// <param name="element"></param>
 5InBlock.gif    /// <param name="eventName" type="String"></param>
 6InBlock.gif    /// <param name="handler" type="Function"></param>
 7InBlock.gif    //    var e = Function._validateParams(arguments, [
 8InBlock.gif    //        { name: "element" },
 9InBlock.gif    //        { name: "eventName", type: String },
10InBlock.gif    //        { name: "handler", type: Function }
11InBlock.gif    //    ]);
12InBlock.gif    //    if (e) throw e;
13InBlock.gif    //    Sys.UI.DomEvent._ensureDomNode(element);
14InBlock.gif    if (eventName === "error") throw Error.invalidOperation(Sys.Res.addHandlerCantBeUsedForError);
15ExpandedSubBlockStart.gifContractedSubBlock.gif    if (!element._events) {
16ExpandedSubBlockStart.gifContractedSubBlock.gif        element._events = {};
17ExpandedSubBlockEnd.gif    }
18InBlock.gif    var eventCache = element._events[eventName];
19ExpandedSubBlockStart.gifContractedSubBlock.gif    if (!eventCache) {
20InBlock.gif        element._events[eventName] = eventCache = [];
21ExpandedSubBlockEnd.gif    }
22InBlock.gif    var browserHandler;
23ExpandedSubBlockStart.gifContractedSubBlock.gif    if (element.addEventListener) {
24ExpandedSubBlockStart.gifContractedSubBlock.gif        browserHandler = function(e) {
25InBlock.gif            var ev = null;
26ExpandedSubBlockStart.gifContractedSubBlock.gif            try {
27InBlock.gif                ev = new Sys.UI.DomEvent(e);
28ExpandedSubBlockStart.gifContractedSubBlock.gif            } catch (ex) { }
29InBlock.gif            var al = "handler.call(element, ev";
30ExpandedSubBlockStart.gifContractedSubBlock.gif            for (var i = 0; i < arguments.length; i++) {
31InBlock.gif                al += ", arguments[" + i + "]";
32ExpandedSubBlockEnd.gif            }
33InBlock.gif            al += ")";
34InBlock.gif            return eval(al);
35InBlock.gif            //return handler.call(element, ev, arguments);
36ExpandedSubBlockEnd.gif        }
37InBlock.gif        element.addEventListener(eventName, browserHandler, false);
38ExpandedSubBlockEnd.gif    }
39ExpandedSubBlockStart.gifContractedSubBlock.gif    else if (element.attachEvent) {
40ExpandedSubBlockStart.gifContractedSubBlock.gif        browserHandler = function() {
41ExpandedSubBlockStart.gifContractedSubBlock.gif            var e = {};
42ExpandedSubBlockStart.gifContractedSubBlock.gif            try { e = Sys.UI.DomElement._getWindow(element).event } catch (ex) { }
43InBlock.gif            var ev = null;
44ExpandedSubBlockStart.gifContractedSubBlock.gif            try {
45InBlock.gif                ev = new Sys.UI.DomEvent(e);
46ExpandedSubBlockStart.gifContractedSubBlock.gif            } catch (ex) { }
47InBlock.gif            var al = "handler.call(element, ev";
48ExpandedSubBlockStart.gifContractedSubBlock.gif            for (var i = 0; i < arguments.length; i++) {
49InBlock.gif                al += ", arguments[" + i + "]";
50ExpandedSubBlockEnd.gif            }
51InBlock.gif            al += ")";
52InBlock.gif            return eval(al);
53InBlock.gif            //return handler.call(element, ev, arguments);
54ExpandedSubBlockEnd.gif        }
55InBlock.gif        element.attachEvent('on' + eventName, browserHandler);
56ExpandedSubBlockEnd.gif    }
57ExpandedSubBlockStart.gifContractedSubBlock.gif    eventCache[eventCache.length] = { handler: handler, browserHandler: browserHandler };
58ExpandedBlockEnd.gif}

posted @ 2008-12-24 10:21 Jiong 阅读(2000) 评论(1) 推荐(0) 编辑

2007年4月5日

摘要: 使用了应用程序域来加载 COM,本想都采用应用程序域的,但没找到传对象到新域里的方法(如传 DataTable、TcpClient 等主域中的对象),所以 Net 的插件采用了读入内存的方法载入,这样就可以给 Net 的插件传主域中的对象了。 阅读全文

posted @ 2007-04-05 22:59 Jiong 阅读(846) 评论(0) 推荐(0) 编辑

2007年3月21日

摘要: 在网站集的首页添加“内容查询 Web 部件”部件,并修改其属性如下,其他的保持默认值。

设置完后就能正常显示了,用该部件还能实现其他的信息显示。 有一点需要注意的是,用系统帐户身份浏览时筛选条件“分配对象”将造成查询不到任何信息,但其他用户浏览时一切正常,解决这个问题需要做以下几点修改。 阅读全文

posted @ 2007-03-21 18:28 Jiong 阅读(779) 评论(1) 推荐(0) 编辑

2007年3月20日

摘要:加载COM对象: Type tmpType = Type.GetTypeFromProgID("对象名称"); Object tmpClass = Activator.CreateInstance(tmpType);

加载.Net程序集: Object tmpClass = Assembly.LoadFile("程序集路径").CreateInstance("程序集名称", true); Type tmpType = tmpClass.GetType(); 阅读全文

posted @ 2007-03-20 18:20 Jiong 阅读(1928) 评论(0) 推荐(0) 编辑

摘要: 我在几个月前给客户做报表时,客户提出这样一个要求,要在报表生成后在打印前用户还能对表格进行调整,比如人为根据感官调整字体的大小行间距等,当时在网上找了些报表控件看了一下,都不能满足后期调整的要求,而且购买第三方的控件又增加公司的成本,又需对实施人员和用户管理员进行相关的技术培训。最后决定还是用最常用的报表设计工具 Excel 来完成这件事。

在 Excel 中有一个“XML映射”功能,是把 XML 当成数据源映射到 Excel 中来,我们就可以利用这个功能把我们需要做报表的数据生成成XML然后映射到 Excel 中,让实施人员或用户管理员可以在 Excel 这个熟悉的环境中来进行可视化的报表设计。下边这个“UpdateXmlData”函数就是实现连接到一个数据库并执行一句SQL语句然后用ADO把数据存为XML并用XSLT过滤掉无用信息,返回一个XML的字符串。 阅读全文

posted @ 2007-03-20 18:18 Jiong 阅读(2653) 评论(3) 推荐(0) 编辑

摘要:最近在学习MOSS2007的过程中,使用 SharePoint Designer 做流程时感觉到有几个不方便的地方,不知道算不算是 Designer 的BUG呢?

1、添加一个“从用户处收集数据”的操作,在其中添加几个“域”,然后在后边的步骤中“比较任意数据源”,在选择数据源时有时找不到新加的“域”,这时只有“完成”整个工作流后再打开工作流,才能找到该域。这种情况一般不会发生在第1次或第2次使用“从用户处收集数据”的“域”。 阅读全文

posted @ 2007-03-20 18:16 Jiong 阅读(1116) 评论(3) 推荐(0) 编辑


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK