【原文】http://chuangyiji.com/2011/12/titanium-ios-android-exchange-code/
在帮公司的app写库函数和教程的时候,做了这个代码片段,titanium mobile还是很优雅的,主要的代码不过几十行,就实现了在ios设备下的外汇兑换计算功能,用户可以选择需要兑换的货币种类,然后输入金额,通过查询汇率就能完成计算。
目前来说,titanium mobile的弱项在于界面,所以我尽可能的要简化界面代码,好在ios设备的主要界面方式还是比较固定的,比如tableview,因此可以封装一些细节代码,使得前端的业务逻辑代码尽量简化。
var my = {};
my.money = 0;
my.data = [];
//货币数组
my.currency = ['人民币', '美元', '港币', '澳元', '加元', '欧元', '日元', '韩元', '新西兰元', '台币'];
//货币对应代码数组
my.cur_sc = ['CNY', 'USD', 'HKD', 'AUD', 'CAD', 'EUR', 'JPY', 'KRW', 'NZD', 'TWD'];
//主窗口
var win = Titanium.UI.currentWindow;
win.barColor = 'faa61a';
win.backgroundImage = '../images/bg/back01.jpg';
//开始创建主tableview
//from 货币 row
row = wing.ui.createTableViewRow({
type : rowPicker,
picker_type : pickerSingle,
picker_data : my.currency,
title : '基准货币',
value : my.currency[0],
buttonOK_title : '确认'
});
//2011.12.16.
row.addEventListener('RowChange', function(e) {
//获得用户选择
my.from = Titanium.App.Properties.getString('RowPicker');
Ti.API.info('from:' + my.from);
});
//设定from的初始值
my.from = my.currency[0];
my.data[0] = row;
//to 货币 row
row = wing.ui.createTableViewRow({
type : rowPicker,
picker_type : pickerSingle,
picker_data : my.currency,
title : '转换货币',
value : my.currency[1],
buttonOK_title : '确认'
});
//row 内容修改事件
//2011.12.16.
row.addEventListener('RowChange', function(e) {
my.to = Titanium.App.Properties.getString('RowPicker');
Ti.API.info('to:' + my.to);
});
//设定to的初始值
my.to = my.currency[1];
my.data[1] = row;
//输入金额 row
row = wing.ui.createTableViewRow({
type : rowText,
keyboard : keyboardNumbers,
title : '金额',
value : '0',
textAlign : 'right'
});
//row 内容修改事件
//2011.12.16.
row.addEventListener('RowChange', function(e) {
my.money = Titanium.App.Properties.getString('RowText');
});
my.data[2] = row;
// tableview object
var tableviewExchange = Titanium.UI.createTableView({
backgroundColor : 'transparent',
data : my.data,
style : Titanium.UI.iPhone.TableViewStyle.GROUPED
});
win.add(tableviewExchange);
其中,my是程序用的对象,所有核心变量都属于这个my对象。
如上面图中所示,这些代码完成了初始化的界面,初始的tableview中的核心数据是my.data,它的核心是三行row,因为基于后端的界面对象支持,因此实现界面的代码已经很简洁了,点击货币名称弹出picker选择的所有代码已经都封装了,前端目前要做的还有获得用户选择的值。个人对于js跨脚本传递变量还不太熟悉,因此用了最简单粗暴的方法,直接读写内存临时文件。
然后是那个核心的“计算”按钮了,通过soap协议如何调用外汇接口,在titanium的demo中有,这里就不多解释了。
//计算货币汇率按钮
var btnCalExchange = wing.ui.createButton({
title : '计算',
bottom : 20,
left : 230,
type : buttonCommon
});
//计算汇率
btnCalExchange.addEventListener('click', function(e) {
//#396 外汇,对于金额输入用数字正则进行判断,不对的话进行提示
//检查金额是否输入合法
if(isRegExp(regFloat, my.money) == false) {
ShowInfo('金额输入错误,请重新输入');
} else {
//soap url
var url = "http://www.webservicex.net/CurrencyConvertor.asmx";
//soap参数设置
var callparams = {
FromCurrency : my.cur_sc[my.currency.findIndex(my.from)],
ToCurrency : my.cur_sc[my.currency.findIndex(my.to)]
};
Ti.API.info('my from and to:' + my.from + ' ' + my.to);
Ti.API.info('my from index:' + my.currency.findIndex(my.from));
Ti.API.info(callparams);
//建立soap对象
var suds = new SudsClient({
endpoint : url,
targetNamespace : 'http://www.webserviceX.NET/'
});
try {
//调用soap
suds.invoke('ConversionRate', callparams, function(xmlDoc) {
var results = xmlDoc.documentElement.getElementsByTagName('ConversionRateResult');
if(results && results.length > 0) {
var result = results.item(0);
var r1 = results.item(0).text;
Ti.API.info('1 Euro buys you ' + r1 * my.money + ' U.S. Dollars.');
//创建结果row
row = wing.ui.createTableViewRow({
type : rowText,
keyboard : keyboardNumbers,
title : '结果',
value : r1 * my.money,
textAlign : 'right',
editable : false
});
my.data[3] = row;
//创建显示汇率row
row = wing.ui.createTableViewRow({
type : rowText,
keyboard : keyboardNumbers,
title : '汇率',
value : r1,
textAlign : 'right',
editable : false
});
my.data[4] = row;
//刷新 tableview
tableviewExchange.setData(my.data);
} else {
Ti.API.info('Oops, could not determine result of SOAP call.');
}
});
} catch(e) {
Ti.API.error('Error: ' + e);
}
}
});
win.add(btnCalExchange);
这个计算按钮,首先通过soap协议调用,进行汇率计算,然后将计算结果和汇率再用前面说的row生成方式生成,并入到my.data中后,刷新tableview即可。
涉及到的wing ui对象代码、通用函数库tools和soap协议支持suds没有附上,这些库函数,特别是wing ui还没有整理好,本人对于js和titanium mobile以及iOS、android都是初学,代码中还有很多粗糙和错误的地方,需要在实际中不断磨合提高。国内好像使用titanium的朋友还不多,似乎用phonegap的多一些。等完成到一定阶段后,再提供下载吧。
以上的代码只是demo之用,在界面和防错处理上还要增加多一些代码才能真正商用。
- 大小: 38 KB
- 大小: 46.3 KB
分享到:
相关推荐
在Mac上搭建Titanium的iOS开发环境
NappAppearance, 在 Titanium UI组件上,使用 iOS UIAppearance的功能 Napp外观描述Napp外观模块使用全局样式功能扩展了 Appcelerator Titanium Mobile 框架。 Napp外观在 Titanium 用户界面组件上使用 iOS ...
Ti.Bluetooth是一个开放源代码项目,旨在支持Appcelerator Titanium中的Bluetooth / BLE。 要求 适用于Android的Titanium SDK 7+ 适用于iOS的Titanium SDK 8+ iOS 10.0以上/ Android 4.0.0以上 Xcode 11以上 下载+...
NULL 博文链接:https://rensanning.iteye.com/blog/1325014
titanium_module_alipay_ios 支付宝的titanium module for ios 作者刘明星 本模块实现了支付宝手机支付sdk的封装,避免了wap支付接口每次支付还需要输入支付宝账号的麻烦。用本地sdk支付仅需要输入6位数字密码即可,...
Appcelerator Titanium中的PayPal iOS SDK 概括 Ti.PayPal是一个开源项目,旨在支持Appcelerator的Titanium Mobile中的PayPal iOS-SDK2.x。 该模块当前支持以下API: 简单付款 未来付款 商家配置 注意:这是Ti....
ti_keychain, Appcelerator Titanium的iOS钥匙串包装 ti_keychain模块钥匙串模块提供了在iOS和Android上安全存储敏感数据的方法。重要的笔记。iOS版本 1.0包含一个设计缺陷,其中传递给的标识符存储在钥匙串项的帐号...
TitanTricks, Titanium Mobile的代码示例和组件 TitanTricks自述文件TitanTricks是 Titanium Mobile 项目,充满了可以重用的代码示例和技巧,面向begginers和中级级别用户。android和iOS兼容,但有些示例仅适用于 ...
TiXml2Json iOS 模块允许将大型 XML 字符串转换为 JSON 对象的转换卸载到本机代码,从而确保高水平的性能,这是通过 DOM API 在 JavaScript 中无法实现的。构建和安装模块为了构建模块,您必须安装 XCode 和 ...
这是Titanium Mobile的CoreMotion模块,涵盖了CoreMotion框架的iOS 7+ API。 这是钛合金的地图模块。 请使用报告问题或向我们的寻求帮助! :rocket: 贡献者 请参阅 有兴趣贡献吗? 阅读指南。 建造 cd iphone ...
用于 Appcelerator Titanium 的 iOS Parse.com 模块 随意下载 com.elijahwindsor.parsemodule.iphone-1.0.zip 以按原样使用它而无需编译。 但是,您仍然需要在某处克隆此存储库,并更改 module.xcconfig 中的一行...
需要iOS中适当的64位支持和覆盖支持。 安装 在Titanium Studio中,选择“安装移动模块...”,浏览并安装tibar-iphone-0.4.6.zip 。 API参考 有关更多详细信息,请参考ZBar-Integration.pdf。 执照 Titanium ...
Appcelerator Titanium中的本机GoogleMaps iOS SDK 概括 Ti.GoogleMaps是一个开源项目,旨在支持Appcelerator的Titanium Mobile中的Google Maps iOS-SDK。 该模块当前支持以下API: 地图检视 注解 瓷砖覆盖 ...
特征更改滚动速度(相同的 Ti.UI.TableView / Ti.UI.ScrollView) 移除滚动弹跳阴影 (iOS 6) 移除滚动延迟WebView 和 Titanium 应用程序之间的通信(代码库是 ) 更改 UserAgent(仅限创建) var webView = Ti ....
ActivityIndicator_Titanium-JS 可在iOS和Android上用于Titanium应用程序的活动指示器用法如何为Titanium应用程序使用ANActivityIndicator。 该示例假定您将文件导入到根文件夹中。 var ANActivityIndicator...
在Appcelerator Titanium中使用iOS 12+ CarPlay框架。 要求 Titanium SDK 7.3.0以上 iOS 12以上 Xcode 10以上 特征 从您的CarPlay实例接收事件 当前特定于CarPlay的用户界面 使用地图模板从CarPlay开始旅程 ...
[Packt Publishing] Appcelerator Titanium 移动应用开发教程 (英文版) [Packt Publishing] Creating Mobile Apps with Appcelerator Titanium (E-Book) ☆ 图书概要:☆ Develop fully-featured mobile ...
Titanium中文版开发手册(翻译版)
Titanium Backup_3.7.4捐赠完全版
使用Appcelerator Titanium中的本机Fabric Crashlytics iOS / Android SDK。 支持这项工作 @hansemannn的整个Firebase支持由社区( @hansemannn和@m1ga )开发和维护。 为了保持该项目的正常运行并能够使用最新的...