面向Web软件工程师的Titanium入门

面向Web程序员的Titanium入门
【官方地址】http://developer.appcelerator.com/blog/2011/09/titanium-mobile-for-web-developers.html

你是不是已经决定开始使用Titanium Mobile,但是不知道从何下手?你现在是一个Web开发者,懂JavaScript,但是感觉用它做一整个应用有些害怕?那么这篇文章将会给你帮助。

Titanium Mobile是什么?
Titanium Mobile首先是一个SDK。和一些浏览器提供一些扩展API一样,Titanium Mobile也同样扩展JavaScript(JS)从而允许你访问原生平台元素的接口。Titanium Mobile运行在一个native窗口上下文中,而不是一个浏览器窗口,从而它也存在DOM。其实,Titanium Mobile中的JS的运行方式更类似于服务器端(server-side)的JavaScript,比如node.js,但是它提供浏览器的实现。从一开始在思想上有这个认识,会为你节省很多麻烦。

在社区中已经存在以Titanium为基础的一批开源Framework,所以Titanium Mobile自身严格来说不是一个Framework。

理解Titanium中的UI设计
在网页中,你可能会用到DOM(Document Object Model)中的DIV来创建UI,并且提供多个页面。在Titanium中也适用了这个理念,但是不同的是,在移动开发中使用“view”来代替各种标记元素,窗口,以及页面。那么在设计应用的页面布局时,原则上来说我们应该指定绝对位置,当我们适用这样的方法时,就能缩短CPU的处理时间,从而优化性能。虽然那么说,但是相比绝对位置来说,我们也可以选择水平和垂直的相对位置来指定页面布局。这样页面布局就很方便。

在Titanium中,也提供了控件,比如按钮,滑块,开关,标签页等等,他可以使用户很直观的使用应用。

MVC是否还有意义
在社区中,已经存在一些开发好的MVC风格的框架,也欢迎大家试试(通过谷歌你能找到很多)。然而,我们认为,使用模块化的结构更容易,比如我们提供的例子应用Tweetanium

Titanium和window的URL
很多开发者查看我们的示例应用KitchenSink 中使用了URL属性,认为那是“最佳实践”,继续沿用它做类似于web页的应用。这里让我来解释为什么你不能按常规来使用这种方法开发应用。

对于window来说,定义URL属性有点儿类似于基于浏览器Web应用,它允许你打开一个新页面。
和浏览器一样,移动应用也会在新的cotext上被运行,换句话说,它就像你应用中的一个单独的应用程序。这样一来的结果是你定义的变量在另外的context中将不能再使用。为了解决这个问题,浏览器使用cookie来存取整个域下的数据,同样,你的应用也能设置属性保证整个应用都能够取到数据。这样的缺点是,即使你不需要的时候,数据也存在,除非你删掉它。而模块化设计方法将会使数据自动销毁。

有时候改变context也是个好事,比如在KitchenSink中,它对于保证变量值存在一个窗口中,而不会影响到下一个窗口是很有帮助的。能使开发者一看就知道是怎么回事。

所以,开发者应该做什么?这里我再次把Tweetanium推荐给你,它是一个很棒的例子,很好的展示了如何设计一个单context的应用。

跨平台测试

尽管被大家普遍的误解,但是Titanium真的不是一个“一次编写,随处运行”解决方案。虽然你可能会觉得这令人惊讶的,但他确实是有意的,也有很好的理由!不同的平台都会有他们的强项和弱项,所以,如果我们开发的应用什么地方都是一样的,他也就削弱了平台的强项,从而远离了他们的目标市场。比如,在iOS应用中,标签栏是位于屏幕的下方,但是完全不同的是,在Android中,标签组是在上方的。然而,虽然你需要适应在用户接口上的差异,但是所有的平台上大多数的业务逻辑是一样的。总的来说,还是要考虑跨平台测试(不想ie6和safari,更像firefox和chrome)。

总结
需要记住的一点是,Titanium的目标不是鼓励你把现有的web应用直接移植到移动电话上来,而是它提供了一种你需要的工具,通过你知道的语言来创建应用,给你的用户一个真正原生,更加逼真的应用体验。

一些有用的链接
  • Tweetanium example app (展示一些推荐方法来结构化你的应用)
  • KitchenSink API demo app (展示Titanium中各种各样API的例子)
  • API documentation
  • Office Hours (能和很多Appcelerator员工语音聊天)
  • Titanium For New Developers (帮助新开发者的屏幕录像)
  • Q&A
  • Wiki
  • Screencasts