读书人

利用titanium兑现外汇兑换计算的ios代

发布时间: 2012-08-10 12:19:33 作者: rapoo

利用titanium实现外汇兑换计算的ios代码(转载)
【原文】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 货币 rowrow = 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 货币 rowrow = 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; //输入金额 rowrow = 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 objectvar 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之用,在界面和防错处理上还要增加多一些代码才能真正商用。

读书人网 >操作系统

热点推荐