2010
Oct 15
October 15, 2010 – 11:09 am
当我们还在考虑JS或CSS框架的时候,有一群人已经在考虑整个站点的前端框架了。在这个层次,具体使用什么JS库已经不重要了,而是整个站点的结构,对客户端的兼容能力,以及测试等环节的把我。
在这里我介绍三个比较优秀的HTML Start-up Packs。
非常帅的一个站点前端骨架。不仅包括apache、nginx的配置文件、crsossdomain.xml、robots.txt、单元测试,它的HTML和CSS文件为移动设备提供了很完善的兼容性(基于Media Query)。
对于新手来说,可能有点太过了。不过即使这样,你也可以抱着学习的心态去学习整个HTML框架的结构。

这个骨架就相对于简单的多,更适合个人网站。仅仅包括必要的font-face和css query支持,以及html5 shim的简单代码。可定制性比较强。

这个框架强调的就是设备兼容性,思路很清晰,其余部分也是留下很多空间自由发挥的。也是个非常棒的框架。而且它的文件都是在线生成的。

Some Final Thoughts
HTML5的时代其实已经来临,这里也不是讨论HTML5还是Flash的问题了。去迎接HTML5的最好方法还是积极的融入这些技术洪流之内啊。
可以说HTML5解决了一些以往无法解决的问题,例如本地存储、动画、高级选择符等等,可是时代又给了我们新问题,例如浏览设备兼容性。
有一点可以肯定,没有HTML5,Web Developer的日子会更糟糕!
2010
Sep 24
September 24, 2010 – 4:31 pm
江湖有江湖的规矩,大家都知道iPhone上的Cocoa Touch框架和Xcode是开发Apple移动产品的王道。Android SDK和Eclipse是开发Android App的王道⋯⋯你可以找到所有主流平台的开发框架和相关IDE。
你说这做移动端应用的人容易么?虽说Blackberry和Android都是基于Java、有效部分人之前也做过Objective-C,但是想到一个大众产品需要提供每个平台的无差别体验时,你做的可能不是一个项目,而是N个项目。哪天国内某个厂商做了自己的操作系统和SDK,你也得啥啥的多做一个版本。对于财大气粗的公司这些都是无所谓的,可是对于那些可怜兮兮的工程师和项目经理更期望自己的产品生命周期能更长一些、受众应该更广一些——我们需要的是跨平台的解决方案啊!
我们第一个想到的词肯定会是HTML⋯⋯这不是什么新鲜东西,在很多其他嵌入式产品中,例如路由,都是用网页作为用户接口的。将Web App封装到一个应用程序包内进行分发这种概念,是一个很直观的想法。

AListApart上已经有文章在讨论这个问题,但是作者根据自身经验觉得WebApp在需求变得复杂之后不能满足任务⋯⋯汗⋯⋯的确有这样的嫌疑吧。如果单纯使用WebApp再套一个WebView的壳,就没法使用重力感应、GPS、照相机之类的功能。
问题的确如此,但是还是希望还是有的。Phonegap、Titanium、Rhodes、SproutCore Touch这三个跨平台的移动框架虽然依然是一个“壳”,就不仅仅是一个WebView的壳而已。
Read More
2010
Sep 23
September 23, 2010 – 5:18 pm
事件代理这个词稍微有些陌生,但是用过jQuery的同学都会知道$.fn.live以及jQuery 1.4之前的一个很有名的插件——$.fn.liveQuery 。在高级的事件处理中,大家不可避免的遇到this关键字指代不明、或者是无法预测事件处理函数执行时的scope。而在一些看不见的地方,复杂的事件监听逻辑下,为了提升性能也不得不用事件的代理。
最简单的事件代理就是将一个方法或函数委托给另外一个对象执行。
var delegator = function(that, func) {
return function() {
func.apply(that, arguments);
};
};
假设我们的一个View中在数据发生改变的时候会被通知,然后需要更新一个列表,但是必须确保这个rebuildList方法在执行的时候,scope是这个View对象,那么我们可以这样:
var updateList = delegator(this, this.rebuildList);
this.model.onRowsInserted.subscribe(updateList);
还有一些delegator的实现方法,甚至直接修改Function的prototype对象来增强函数或方法的功能。
Function.prototype.delegate = function(that) {
return function() {
this.apply(that, arguments);
};
};
除了解决scope的问题,delegate机制更大的作用是将监听器本身的注册到别的对象之上。
jQuery 1.4之后加入的$.proxy() 就是同样实现这样功能的。里面同样是用Function.apply来执行的。
DOM Level 2的事件传播机制是先从document对象开始向目标对象传播,沿途会执行该事件的所有事件处理函数。
到了目标对象本身,也会执行该对象上对该事件的处理函数。
最后,还会再次向document传播,沿途同样会执行该事件的所有事件处理函数。
第一个阶段被成为capture、第二个阶段被成为bubbling。
IE浏览器目前只有bubbling是完美支持的。不管怎么样,我们可以利用这样的bubbling机制让我们的事件管理更加强大——为什么不把事件处理统一放到祖先元素上去呢?
Read More
2010
Sep 22
September 22, 2010 – 3:39 pm
谈到RIA、HTML5,脑海你出现的总是复杂的Web App——人们企图用JS、HTML、CSS来写桌面程序。抛开桌面开发有MFC、AWT之类的库这种优厚待遇不说,其实JS就没有被设计成为一个界面开发的语言,但是人们对JS的期望却越来越高。
尽管如此,没有一个好用的MVC的库是JS的尴尬——或者说沒有用个能够具有伸缩性的库。SproutCore、Cappuccino这些都是重量级的,很难在项目里说用就用。还有一个库名字就叫“Javascript MVC”,虽然看起来很轻量,但是实际用起来那也是相当的麻烦。面对这些MVC库,你很难想把他们用到一个小项目里去。就那么些操作,干嘛把骨架搭这么复杂呢?
HTML5的出现给JS带来了LocalStorage、Canvas、Offline Storage之类的重要API,没有这些东西根本就无法做出与桌面程序类似的体验。与此同时,所谓“能力越大,责任就越大”,人们对JS的期望值是空前的提升了。这个时候面对复杂的程序逻辑和未来对程序伸缩性的需求,不用MVC进行模块化将内部组件Decouple,项目的每次重大变化应该只有全部重写的分。
这几天虽然在学校办事,也在抽空重写之前的那个LocationSelect插件,之前用jQuery写的逻辑太混乱了,算法效率也比较低,那个时候的目的仅仅是“急于实现一个地址联动的组件”给Map2fun这个项目用。其实这个插件里面是可以有很多学问的,webservice的使用、缓存、查询算法,最重要的是这个“联动”二字,3个下拉菜单看似简单却极为蛋疼的互动逻辑。干脆就用MVC的模式重写吧⋯⋯
项目的代码可以参见插件的文档页面。其实我也是第一次把MVC完整的用到一个小项目里,代码越往后看可能越觉得不伦不类。
Read More
2010
Aug 21
August 21, 2010 – 5:20 pm
最近要做一个产品的DEMO,身为前端开发的我干起了Android开发。之前在iphone上写过一些WebApp,所以任务下来的时候没有任何迟疑,心想做手机的应用应该都差不多吧⋯⋯
开发Android要有耐心⋯⋯
我从下载Android的Eclipse插件的那一刻我就后悔了⋯⋯由于考虑到可能要改变设备,我就义无反顾的选择了PhoneGap。看到版本是0.9,我心就凉了一截,但是实在无奈,因为这个产品的Prototype很有可能马上转向iPhone上,到时候重写代码那就悲剧了。

这个完全继承了Eclipse插件的特点:莫名其妙的这么多安装选项、复杂的安装顺序——Dependency和Version的问题安装程序你不能自己判断么?好吧,这个不怪Google了。
经过了漫长的Download,终于进入了Eclipse ADT环境。话说有个AVD管理程序,可以添加虚拟设备。好吧,就是模拟器吧⋯⋯神啊,Android原来有这么多个版本,还有这么多选项。

启动试试,我在工作站上竟然等了快1分钟,这个模拟器连真机的启动速度都模拟了,NB!
对比一下iPhone官方的模拟器的选项和那瞬间启动速度⋯⋯

之后写了个HelloWorld,进行了一下调试,找了台Xperia 10i来做了下真机调试。由于以前写Java的时候用Eclipse,所以调试和发布阶段我都还算熟悉⋯⋯
Read More
2010
Aug 7
好吧~到了掏家底的时候了。最近看了很多相关资料,所以还是有很多可以说的。相信大家在消化这些资料之后,应该会对HTML5和CSS3有较为深入的了解。
Well, It’s time for me to share something about HTML5 and CSS3. We’ve discussed too much about them and it’s necessary to really dive into these techs……
Future Trends
Tutorials for Novices
Important Documentations
Read More