作者的blog: http://blog.csdn.net/oyiboy/
我之所以还是要宣扬用mvc来开发asp,只是想让面向过程的思考方式变成面向对象的思考方式,这个对于任何一种语言的开发员来说都是有好处的。
mvc是个标准模型,asp要实现似乎真的是很困难,但是标准是标准,运用是运用,既然asp要实现这个模型很难,那可以尝试着将mvc模型变形成适合自己的模型。
“不管白猫黑猫能逮到耗子的就是好猫。”而对于我们开发者来说,不管是什么模型,能正确的指引我们的思路,完美完成项目的模型就是好模型。毕竟用户最终用是我们的程序而不是我们的模型。
这段时间由于接触到mvc,也知道了class的运用方式,遭遇到了事件的设计。
其实具体的事件设计方式我也不是很明白,在qq里newskyline跟我说了,asp没办法作class的事件,
只能模拟。而我呢。算是为达目的不则手段(写程序而以)的,认为模拟也好,非模拟也行,只要达到我想要的效果就是好东西。
模拟事件的方式有两种:
第一种:借用了execute/eval,用一个属性收取函数名的字符,然后使用execute/eval来运行函数。
如:
obj.ondataupdatestart="checkdata"
其构造为:
public property let ondataupdatestart(byval a_strvalue)
'在此省略了对a_strvalue的一些严谨的验证代码。
p_strondataupdatestart=a_strvalue
end property
事件是触发为:
public sub dataupdate()
'...忽略过程...
execute(p_strondataupdatestart & "(参数变量一,参数变量二)")
'...忽略过程...
end sub
稍微提一下execute和eval的不同点。
同样的“x=y”。execute("x=y")的结果是将y值赋给x,而eval("x=y")则会返回一个boolean值,表示x与y的测试结果,如x等于y则返回true,反之返回false。
第二种:借用函数指针getref,在vbs手册的解释上来看就是绑定事件专用的函数。具体解释如下:
“返回一个指向一过程的引用,此过程可绑定某事件。”
具体运用例子,如:
obj.ondataupdatestart="checkdata"
其构造则改为:
public ondataupdatestart '其实可以使用get/let模式,想偷懒了,所以直接声明一个公开变量来传递了。
事件触发则改为:
public sub dataupdate()
'...忽略过程...
set me.ondataupdatestart=getref(ondataupdatestart)
me.ondataupdatestart("参数变量一","参数变量二")
'...忽略过程...
end sub
以上两种方式可以实现事件绑定,但是,从解释上来说,我比较推崇第二种,相对于execute/eval来说更为严谨一些。
经典论坛讨论帖:
http://www.blueidea.com/bbs/newsdetail.asp?id=2467752
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器