AIR有三种开发手段,基于AJAX,基于FLEX,基于FLASH。三种的侧重面不同。
基于AJAX的相关资料可以参考:
http://help.adobe.com/en_US/AIR/1.5/jslr/ 这个是API手册。接口功能很明确,解释很详细
http://help.adobe.com/en_US/AIR/1.5/devappshtml/ 这个是官方的getting start,循序渐进,相当不错,基本涵盖了所有使用的功能。(E文的)
注:第一次接触AIR,对于AIR with AJAX的理解可能会有很多错误,仁者见仁了
对AIR with AJAX 的理解:
1、虽然AIR的API中提供了一些同步功能,但AJAX始终是“异步”,是基于事件的异步过程。所以在构建APP时,一定要先考虑好,对事件的监听,以及整体的流程控制。
为了很好的监视事件执行的流程,我加入了一个debugTrace的函数,负责输出当前正在执行的函数。
<code>
var $G.debug = {”isdebug”:true,”debugstep”:1} //全局变量
function debugTrace(msg)
{
if($G.debug.isdebug){
air.trace(”[" + $G.debug.debugstep + "]” + msg);
$G.debug.debugstep++;
}
return true;
}
</code>
2、在APP执行的过程中,函数的类型要时刻关注,要时刻监视一些函数的变化过程。这种调试的手段有很多种,比如写文件,或者使用AIR提供的调试工具。
//AIR 的调试工具
var obj = new Object(); //obj可以为任何类型,不一定非是Object
air.Introspector.Console.log(obj);
3、在程序中,如果有一些需要定期执行的函数,可以使用3种方式来实现, setTimeout, setInterval, 和AIR自带的Timer()。
需要注意的是,setTimeout , setInterval 对于事件的监听,是不友好的,而且,一定程序初始化以后,你无法改变”时间间隔”的参数。除非clearTimeout或者clearInterval。 并且在使用两个函数时,由于AIR安全机制,用法稍有不同
setTimeout(”functionName”, 1000); //这样是不会被执行的
setTimeout( function(){ user_func(); } , 1000); //这样才能被执行
由于封装的关系,计时器的时间间隔一但被设定,将无法在这一执行过程中改变,所以,有关时间间隔的设定,一定要使用全局变量。并且清除计时器的最好方式就是让其等于null
//本例中 $T 为全局变量, $T.queue 是一个AIR计时器Timer()的一个实例。
if(typeof($T.queue) != “undefined” && $T.queue != null){
$T.queue.stop(); //停止计时器
$T.queue = null; //废掉计时器
}
4、不要指望AIR自己的垃圾回收机制来释放额外的监听开销,因为那是十分不靠谱的事情,能手工干掉的,一定要有意识的去干掉,最好的方法就是在回调函数中,干掉监听。
var onComplete = function(event){
obj.removeEventListener air.Event.COMPLETE, onComplete); //就地干掉
…
…
}
obj.addEventListener air.Event.COMPLETE, onComplete);
并不是所有的监听都要干掉的。比如“鼠标悬停”事件,并不是只监听一次就完的,如果被干掉,再次有事件发生时,程序就无法响应了。
5、AIR with AJAX中,使用JS框架的好处:
(1)你不用去担心监听事件,和释放监听的过程;
(2)DOM模型的选取,相当简单;
(3)UI特效的实现。
iFan用的是YUI的框架,iNotice用的是jQuery的框架。可见,AIR with AJAX对JS框架是相当友好的。
6、AIR虽然是跨平台的runtime,但是在显示上,不同操作系统的显示还是存在差异,这个我没实际测试过……
7、API中,几个重要的接口需要看!仔细的看!一点不漏的看!
HTMLLoader 这个是加载外部HTML的
NativeWindow 这个是管理窗口显示的
NativeApplication 这个是管理应用程序的
FileStream 这个是读写文件的
Data里面的所有东西 是关于sqlite,和数据加密的!
8、很多的陷阱!!!
在AIR中,由于安全机制的影响,很多函数,无法正常被执行。被抹杀的函数是eval!
举几个getting start中的例子,出自第10章
eval(”obj.” + propName + ” = ” + val); //无效
obj[propName] = val; //有效
//无效
function compile(var1, var2){
eval(”var fn = function(){ this.”+var1+”(var2) }”);
return fn;
}
//有效
function compile(var1, var2){
var self = this;
return function(){ self[var1](var2) };
}
<a href=”javascript:code()”>Click Me</a> //无效
<a href=”#” onclick=”code()”>Click Me</a> //有效 , 这里,使用JS框架的事件监听优势就能体现出来了。 直接$(’element’).click( function(){ alert(”click~”); });
Tags: Adobe, AIR, Ajax