Heero's Blog

Heero's Blog » jRaiser
Jul 30

jRaiser 1.3.4发布

  • 作者:heero
  • 时间:2010-7-30 09:29

其实最近已经在开发jRaiser 1.4.0以及jRaiser UI 1.0.0了,但是开发过程中发现了现有代码的部分BUG,所以还是先将其修复:

  • 在$.util.parseTpl中添加容错处理,当模板为null时返回undefined,当values为空时返回模板内容。
  • 优化了各种样式操作。
  • 修正了$.event.fix在Opera下出现的异常。
  • 优化了浏览器检测的逻辑。
  • 在$.ajax.send的Ajax请求中增加X-Requested-With的header。

点击此处下载jRaiser 1.3.4

Jul 18

jRaiser与jQuery的冲突问题

  • 作者:heero
  • 时间:2010-7-18 09:58

最近有网友在留言板里问到jRaiser和jQuery的冲突问题,特此写一篇文章进行解释。

冲突的根源

众所周知,jQuery是通过一个全局变量$来引用的,而jRaiser加载时也占用了$。因而冲突的根源就是全局变量$。说得明白点:当jQuery和jRaiser共存的时候,$究竟是谁

分析jQuery和jRaiser的源代码可以知道,这两个库在加载的时候都会占用$变量。因此,按照覆盖的原理,谁后加载,$变量就是谁

如何解决冲突

别名法

除了$,jQuery和jRaiser都占用了另外一个变量作为别名,这个别名就是库本身的名称。

jQuery("div"); // 使用jQuery
jRaiser("div"); // 使用jRaiser

使用别名的主要问题是输入不方便:“$”只有一个字符,而“jQue

Apr 26

jRaiser 1.3.3 发布

  • 作者:heero
  • 时间:2010-4-26 10:33

这个月对jRaiser进行了两次改动,版本分别是1.3.2和1.3.3。

1.3.2版主要是修改了选择器引擎,在适当的时候调用浏览器提供的querySelectorAll接口,提高搜索元素的效率。但由于只有IE8、Firefox 3等最新版本的浏览器支持此接口,所以这次优化对IE6、IE7是无效的。

1.3.3版本在1.3.2版本的基础上修正了id选择器的一个BUG(感谢网友atans提交),并对Array.prototype.indexOf进行了修正使其与ECMAScript中定义的一致。

29日再度更新1.3.3版,解决IE下的id选择器BUG。

下载地址:http://code.google.com/p/jraiser/downloads/list

Dec 4

jRaiser揭秘——事件监听兼容处理

  • 作者:heero
  • 时间:2009-12-4 14:56

在事件监听处理方面,IE提供了attachEventdetachEvent两个接口,而Firefox提供的是addEventListenerremoveEventListener。最简单的兼容性处理就是封装这两套接口:

function addEvent(elem, eventName, handler) {
  if (elem.attachEvent) {
    elem.attachEvent("on" + eventName, handler);
  } else if (elem.addEventListener) {
    elem.addEventListener(eventName, handler, false);
  }
}

function removeEvent(elem, eventName, handler) {
  if (elem.detachEvent) {
    elem.detachEvent("on" + eventName, handler);
  } else if (elem.removeEventListener) {
    elem.removeEventListener(eventName, handler, false);
  }
}

然而,上面两个函数还没把问题完全解决。Firefox下,事件处理函数中的this指向被监听元素本身,而在IE下则不然。要解决这个问题,我首先想

Nov 29

表单验证插件 0.1 For jRaiser

  • 作者:heero
  • 时间:2009-11-29 16:47

为了把自己从表单验证中解放出来,特地写了这个插件。下面以一个简单的用户注册表单为例说明用法。

<form id="regForm">
  <input type="text" name="userName" />
  <input type="password" name="password" />
  <input type="password" id="password2" />
  <input type="submit" value="提交" />
</form>

这个表单包含三个输入框,分别是用户名(userName)、密码(password),以及为了防止密码输入出错而设置的第二个密码框(password2)。验证规则如下:

  • 用户名不能为空;
  • 密码不能少于6个字符;
  • 两次密码输入必须一致。

要使用表单验证插件,首先要建立一个验证器对象,其参数是表单元素:

var validator = new $.validate.FormValidator($("#regForm"));

随后添加用户名的验证规则:

validator.addRules("userName", ["noempty", "", "用户名不能为空"]);

addRules方法最少要有两个参数:第1个参数是控件名,第2-N个参数是验证规则。验证规则是一个数组:第0个元素是验证指令,除了上面的"noempty",还有

Jul 28

jRaiser诞生记

  • 作者:heero
  • 时间:2009-7-28 16:38

自己写一个Javascript框架,是大四下学期才决定做的事情。随着Ajax的兴起,网站对Javascript的需求越来越大,而Javascript本身有不少缺陷和不足,需要通过框架去完善。而当时也已经有不少这类框架,比如prototype、jQuery、YUI等。虽然直接用这些现成的框架是很省力的,但我并没有这么做,原因在于:其一,需要学习这些框架的用法;其二,一旦出问题,要找到原因是很难的,毕竟我不是这些框架的作者;其三,自己重新写一个框架,能学到的东西更多,且成本不高。

那时候我对Javascript还是一知半解,需要找一些代码参照。我很庆幸有朋友给我介绍了myJsFrame,它麻雀虽小,五脏俱全。jRaiser最原始的版本就是仿myJsFrame编写的,还加入了一些prototype的内置类扩展,如著名的 function.prototype.bind 。

后来,我看了《精通Javascript》一书,作者是jQuery之父John Resig,他在书中提到了由另一位大师级人物Dean E