Objot 版本23 Javascript端手册


版权所有2007-2015蔡倩彦,采用GNU LGPL版本2.1许可模式。

关于Java端开发请参考《Objot 版本23 Java端手册》。 关于Actionscript端开发请参考《Objot 版本23 Actionscript端手册》

所有以$为前缀的属性都由objot保留使用

范例

参考《Objot 版本23 Java端手册》

数据编解码

参考《Objot 版本23 Java端手册》

$class = function (codec, ctor, sup, proto)
将一个函数定义为 类及其构造函数。if(codec)则此类可以被编解码。 ctor为此函数的名字(将用eval得到此函数),例如'foo.Bar'(必须预先定义好foo.Bar这个函数)。 sup为父类(即父类的构造函数)。proto的属性被复制到此类的prototype中。
$class.enc = function (clazz, key, encs)
为类添加编码规则。clazz是类(即构造函数)。 key是规则key,当编码时指定这个key或其子类时,依据encs来编码。 encs==null表示对象的所有自有属性(hasOwnProperty)被编码; 否则encs是字符串数组,表示对应key及其子类,哪些属性需要编码。
$enc = function (o, ruleKey)
编码,使用的规则与 每个编码的对象 及ruleKey相关。
$dec = function (s, byName, decoded)
解码,使用的规则与 每个解码的对象 及ruleKey相关。返回数据图的根。 byName是function(name),返回由name得到的对象。 如果byName为null,则默认方式是:根据$class指定的名字直接创建对象,不调用构造函数。 decoded是function(o),o是已经完成解码的对象,可用于解码后处理。

例如定义Ok和Err表示服务成功和失败,ErrUnsigned表示服务需要用户登入验证:

Ok = function (hint) {
	this.hint = $(hint);
}
Err = function (hint) {
	this.hint = $(hint);
}
ErrUnsigned = function (hint) {
	this.hint = $(hint);
}
$class(true, 'Ok'), $class(true, 'Err');
$class(true, 'ErrUnsigned', Err); // ErrUnsigned的父类是Err
3个function定义了构造函数,$class把这些function定义为类。
ok = new Ok("I'm Ok");
_ = $enc(ok, Object);
编码后的字符串可以再被解码为数据:
ok2 = $dec(_);
if (ok.hint != ok2.hint) throw 'error';

网络

$http = function (url, time, req, done, data)
使用XMLHttpRequest进行异步http交互。 req是请求内容字符串,总是用POST方式发出请求,无需格式转换,长度不受限制。 timeout>0是超时毫秒数,否则忽略不做超时处理。 done是交互结束时异步回调的函数,可能是响应,可能是超时,也可能是中止。 返回function(),用来中止这次交互,并异步调用done,如果交互已经结束,则不起作用。

done是function (code, resp, data)。 code是一个整数:0表示交互成功(http响应码200),1表示超时,-1表示停止,100~999表示http响应码,>=1000通常表示网络错误。 当code == 0时resp是服务端返回的响应字符串,其他情况则是错误信息字符串。 data是调用$http的data参数,可以给done传递额外对象,如果调用$http省略data参数,则$http的返回值将做为data传给done。 每次$http交互必调用done正好一次,除非没有设置超时,或者跳转到别的页面,或者Javascript引擎错误;)。

$http.net = 'Network Failure'
$http.off = 'Offline'
$http.time = 'Timeout'
$http.stop = ''
错误信息字符串,表示网络错误、离线、超时、中止。
$.form = function ()
创建一个支持文件上传的form dom节点。firstChild为display:none的textarea dom节点。
$http.form = function (url, time, req, done, data, form)
使用form和iframe进行异步http交互,可上传文件。 各参数参见$http,而form为$.form创建的dom节点。
$http.formNet = 'Network or Server Failure'
$http.n200 = '400-500'
form交互的错误信息,表示网络错误、非200响应码,其他错误信息与$http相同。
$Do = function (url, hint, req, this3, done3, this2, done2, this1, done1, form)
对$http和$http.form的封装。hint是提示字符串,可供界面显示。 done3~1是回调函数,this3~1是回调时设置的this对象,done1先于done3回调,this3~1为undefined时,done3~1忽略。 $Do返回值和$http相同。

done3~1是 function (ok, err, http)。 若服务器响应200,则$dec解码出数据图的根。 若根不为Err(参见Java端),则ok为根,err为undefined。 若超时或错误或根为Err,ok为undefined,err为Err对象。 若中止,ok和err均为undefined。 http是$Do也是$http的返回值。 当done1出现错误,将传递给Javascript引擎,done2就不执行了,依此类推。

$Do.err = function (code, res)
错误时,得到Err对象。默认是return new Err('HTTP Error ' + code + ' ' + res)
$Do.url = ''
$Do.urlPost = ''
$Do.timeout = 30000
url的前缀和后缀,超时。
$Do.byName = null
$Do.decoded = null
传递给$dec的两个参数。

DOM操作

$D = document
$id = function (id)
返回$D.getElementById(id)
$dom = function (domOrName, prop, value ...)
创建或修改一个dom节点。 domOrName为字符串时,通过createElement创建一个节点;为dom节点时,则修改这个节点。 给节点增加了几个方法,参见下文(以$dom.表示)。

第二个参数开始是若干组属性参数:首先是属性名,然后是属性值。 属性名表示dom节点的javascript属性名(className简写为c,style.cssText简写为s)。 属性值如果是function,则属性名表示事件名(不含on前缀),属性值表示事件响应函数; 随后的参数表示此function的this,再随后的参数表示此function的调用参数(参见$dom.attach,若是最后一组参数,这两个参数可以省略)。 属性值如果是其他值,则直接按照属性名设置到dom节点上。

$doms = function (domOrName, props, from)
与$dom类似,但属性参数在数组props中,从from下标开始。
$a, $s, $br, $l, $d, $p
与$dom类似,创建<a>, <span>, <br>, <label>, <div>, <p>节点。
$tab, $tb, $tr, $th, $td, $ul, $ol, $li
与$dom类似,创建<table>, <tbody>, <tr>, <th>, <td>, <ul>, <ol>, <li>节点。
$h1, $h2, $h3, $h4
与$dom类似,创建<h1>, <h2>, <h3>, <h4>节点。
$inp, $sel, $ops, $lns, $ln, $chk, $rad
与$dom类似,创建<input>, <select>, <option>, <textarea>, <input type="text">, <input type="checkbox">, <input type="radio">节点。
$a0, $bn
与$dom类似,创建<a>, <button>节点,但绑定了一个click事件响应函数,取消默认行为,即点击不跳转。
$tx = function (singleLine)
通过createTextNode创建文本节点,不能换行,但允许连续的空格。
$DE = $dom($D.documentElement)
$B = $dom($D.body)
简写。
$dom.add = function (index, dom, ...)
增加子节点,如果index参数被忽略,或<0,或>=现有子节点个数。 在现有index子节点前插入子节点,如果index>0。 返回本节点。
$dom.rem = function (index, len, dom ...)
删除本节点,如果没有参数。 删除本节点,然后替换成dom,如果index===true且忽略len。 从Math.max(index, 0)开始删除len个子节点,如果index为number且len > 0。 从Math.max(index, 0)开始删除全部子节点,如果index为number且!(len > 0)。 返回本节点。
$dom.des = function (index, len, dom ...)
与$dom.rem类似,但对删除的节点及其子孙节点,触发名为'des'的事件,解除所有事件响应函数。 返回本节点。对于IE 6,应使用本方法代替$dom.rem,以避免内存泄漏。
$dom.cla = function (remove, clazz)
设置本节点的css class,如果忽略remove。删除本节点的css class,如果remove===0。返回本节点。
$dom.attr = function (a, v)
返回名为a的html属性值,如果忽略v。删除html属性值,如果v===null,返回本节点。其他则设置html属性值,返回本节点。
$dom.tx = function (v, multiLine)
返回本节点及子孙节点的文本内容(或<textarea>的value),如果没有参数。 设置本节点的文本内容(现有子节点被$dom.des),if(multiLine)为多行,否则换行符转换为空格,返回本节点。
$dom.show = function (v)
返回本节点是否显示(style.display != 'none'),如果没有参数。 切换本节点style.display,如果v===0,返回本节点。 设置本节点style.display为'',if (v),返回本节点。 设置本节点style.display为'none',if (!v),返回本节点。
$dom.attach = function (type, handler, This, args, old)
绑定事件。type为事件名,不含on前缀。handler为事件响应函数。 This为handler的this,若false,则为本节点,若===true,则new handler。 args为handler的参数,若false,则为事件对象。 old为被替换的handler(先detach old再attach handler),可以忽略。 返回本节点。 一个事件名可以绑定多个handler,调用顺序与绑定相反。
$dom.detach = function (type, handler)
解除事件绑定。type为事件名,不含on前缀。handler为事件响应函数。

其他

参见源代码。