WRT 第四、五天都是debug。第六天,收获prototype。

前两天都是在debug,调整布局。最后发现是WRT中的时间函数与桌面浏览器的支持有差别。还有就是定时器执行的函数一定要尽量优化减少其工作量,否则会严重影响浏览器反应速度。

在写工作总结的时候,才意识到从AccuWidget改来的这个小widget “浪费”了自己很多时间。因为根本没用到什么好玩的东西。把自己的一些想法实践一下, 最重要的是想把prototype用起来。把AccuWidget里的js改成面向对象的。
做法、问题:
1)定义数据模型。
var Movie = Class.create();
Movie.prototype = {   
    initialize : function(title, image) {
        this.title = title;
        this.image = image;
        this.director = "";
        this.performer = "";
        this.briefDescription = "";
        this.otherInfo = "";
    }
}

2)定义MovieEngine.  访问网络获取rss data, 操纵 html dom.
var MovieEngine  = Class.create();
MovieEngine.prototype = {
    initialize: function(dataUrl){
        this.url = dataUrl;
        var movieList = [];
    },
    … …
}

3)loadXMLDoc是通过prototype定义的MovieEngine 类中的一个方法。中使用XMLHttpRequest,一种是使用prototyp提供的,这种可以工作,一种是使用wrt推荐的,这种方式有问题。不知道是不是在类中定义的缘故。没时间搞明白了。
loadXMLDoc : function () {
    //this.loadXMLDoc.caller.toString();
    if (IsUsePrototypeAjaxRequest) {
        var myAjax = new Ajax.Request(
                            this.url,
                            {method: 'get', onComplete: this.processStateChange}
                        );
    }else {
        var req = this.createXMLHttpRequest();
        req.onreadystatechange = this.processStateChange(req);
        req.open("GET", this.url, true);       
        req.send(null);           
    }
},   

4)在类的方法中调用类中的方法,似乎都需要使用this. 。

5)在XMLHttpRequest的回调匿名方法中不能调用类中定义的方法。所以只要把回调函数使用的方法也放到回调函数中了。
6)其实如果回调函数使用的函数不被其它函数使用,这种javascript的闭包概念似乎还提供了一种封装。如果有函数需要共享,就不知道怎么办好了。

使用了prototype感觉确实很好。可以使用OO的想法去写javascript了。

关于开发Nokia Widget的大致步骤:
1)建立aptana开发环境,使用prototype。
2)根据需求把xhtml页面定义出大致的功能区域,赋予合适的div ID。
3)建立数据模型/或者具有行为的entity。取决于应用的复杂程度。
4)页面流转控制的类、访问网络的类。
5)真机上调试用的div也是必须的。
7) 还需要一个build系统。这个build需要区分是debug for firefox 还是release for nokia mobile。 其实WEB项目也很需要build系统做调整进行针对生产环境的优化。
8)别想做复杂的应用,因为widget现在还不能访问本地存储。把用户数据都放到server意味着用户需要注册,为了使用一个widget,用户愿意注册么?

把获取数据和简单显示的部分做完了。中文显示有问题。还是不能够在回调函数中调用,与回调函数同级的其它函数,所以必须把对数据的处理写在回调函数的闭包里。以后注意一下别人的实现吧。

关于等待页面。当提示用户选择SAP时,httprequest state是1。当建立连接后是3.  3和4之间是浏览器读取数据的时间。所以,如果显示进度条放在3之后比较好。state==4处理完数据后,再取消滚动条。

页面美化的工作很多。一个团队应该是各种特长队员的集合,彼此用自己的特长工作,高效而轻松。今天算是实习了javascript/prototype的面向对象编程。

参见 aTangMovie.wgz

你可能感兴趣的:(JavaScript,prototype,网络应用,aptana,Nokia)