原文:http://wiki.appcelerator.org/display/guides/Building+Reusable+Factories
Titanium 创建UI,其实用工厂模式。当App越写越大后,就要自定义可重用组件,也就是UI工厂。
Titanium 创建UI,就是用工厂模式:
Ti.UI.createView({ height:400, backgroundColor:'red' });
var myApp = { someFunction: function() { //do stuff }, someVariable: true };
myApp.ui = {}; //create a UI namespace within your app myApp.ui.createHeaderView = function(/*Object*/ _args) { var v = Ti.UI.createView({ backgroundColor:_args.bgColor||'red', height:80 }); v.add(Ti.UI.createLabel({ text:_args.title||'My Cool App' })); return v; };以这种方式设计接口好处多多:在程序各处重用。因为是把JS对象作为参数,你可以自定义API的结构。还可以保证函数名统一。像这里就是Titanium 命名空间+create+View名字。你还可以更进一步,给组件加关键词base(基类)来作为后缀。所以名字就是create+View名字+Titanium 的基础组件名字:
和基础组件一样,自定义组件通常要有一个外部API。在工厂方法的最后返回这个对象。
myApp.ui.createHeaderView = function(/*Object*/ _args) { var v = Ti.UI.createView({ backgroundColor:_args.bgColor||'red', height:80 }); var l = Ti.UI.createLabel({ text:_args.title||'My Cool App' }); v.add(l); //external API function v.blink = function() { v.animate({opacity:0,duration:1000},function() { v.animate({opacity:1,duration:1000}); }); }; return v; };这样就能调用函数了:
var h = myApp.ui.createHeaderView(); h.blink(); // will cause the view to fade out, then in
除了定义API外,还希望自定义组件能够发送组件类型或程序类型·的事件,给自定义组件加事件很简单。稍微修改blink方法,在动画结束时,向 'base'视图发送事件。
v.blink = function() { v.animate({opacity:0,duration:1000},function() { v.animate({opacity:1,duration:1000}); //now, fire an event on yourself to let any //interested parties know this animation is complete v.fireEvent('blinkComplete'); }); };这样一来,随便哪个窗口,只要创建了hear视图,就能接收 blinkComplete 事件了。
var h = myApp.ui.createHeaderView(); h.addEventListener('blinkComplete', function() { Ti.API.info('blink complete'); }); h.blink(); //console will print message from listener这些技巧,方便你创建面向组件,事件驱动的手机App。更多知识见 Helium 库。
生词
sake 原因
uniformity 统一