【转】利用Titanium实现外汇兑换计算的ios代码

【原文】http://chuangyiji.com/2011/12/titanium-ios-android-exchange-code/

在帮公司的app写库函数和教程的时候,做了这个代码片段,titanium mobile还是很优雅的,主要的代码不过几十行,就实现了在ios设备下的外汇兑换计算功能,用户可以选择需要兑换的货币种类,然后输入金额,通过查询汇率就能完成计算。

目前来说,titanium mobile的弱项在于界面,所以我尽可能的要简化界面代码,好在ios设备的主要界面方式还是比较固定的,比如tableview,因此可以封装一些细节代码,使得前端的业务逻辑代码尽量简化。

[img]http://dl.iteye.com/upload/attachment/611164/42355e5f-0df4-3801-8fa0-985899b6e73c.png[/img]

[img]http://dl.iteye.com/upload/attachment/611166/4ee1e4c1-6843-3607-8cb1-0f03e49a5ab6.png[/img]


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之用,在界面和防错处理上还要增加多一些代码才能真正商用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值