【Titanium】通过回调和事件来降低耦合度
【官方地址】https://wiki.appcelerator.org/display/guides/Callbacks+and+Events+for+Loose+Coupling
我们在阅读了Appcelerator wiki中的“JavaScript最佳实践”之后都应该知道,使用全局变量或者破坏全局命名空间是编写高质量,可维护代码的禁忌。然而我们也知道旧的习惯是很难改的,我们在写代码时需要“this”来设值?只能创建一个全局变量来使用了。
通过这种方法解决问题最终他还会为我们带来麻烦。我们暂时忘记全局变量,将会有另外一种方法来得到同样的信息。
这里需要我们写在黄色便签上,让我们重视的有三点:
1、我们将要编写的是模块化代码(至少从现在开始)
2、基于事件的编程是很好的
3、只有在不得已的时候再使用全局变量
获取地理信息
这里,首先问题是什么?获取用户的当前地理位置信息。
这个处理会被异步执行,我们要更新的UI控件在另外一个文件中,当然,这是一个模块话的代码。
我们都知道通过调用API Titanium.Geolocation.getCurrentPosition使用回调函数来让我们知道什么时候它找到了地理位置信息。
// private varsvar mainWindow, callback_label_coords;var styles = require('styles');var maps = require('lib/maps');/** * @param {Object} args properties for the window */exports.AppWindow = function(args) { var instance, event_label, callback_label; // create window instance = Ti.UI.createWindow(args); // make callback label callback_label = Ti.UI.createLabel(styles.callback_label); instance.add(callback_label); callback_label_coords = Ti.UI.createLabel(styles.coords_label); instance.add(callback_label_coords); // make event listener label event_label = Ti.UI.createLabel(styles.event_label); instance.add(event_label); event_label_coords = Ti.UI.createLabel(styles.coords_label); instance.add(event_label_coords); // create event Listener Ti.App.addEventListener('location.updated', function(_coords) { event_label_coords.text = String.format("longitude: %s\n latitude: %s ", _coords.longitude + "", _coords.latitude + ""); }); // do the callback to get current location maps.currentLocation(gpsCallback); // save the window mainWindow = instance; return instance;};/** * @param {Object} _coords lat, lon values from locationo */function gpsCallback(_coords) { callback_label_coords.text = String.format("longitude: %s\n latitude: %s ", _coords.longitude + "", _coords.latitude + "");}总结
使用回调和事件对你的代码是有益的。它减少耦合,更好的分离业务逻辑和表现层。从现在开始,我们将在应用开发中更加强化模块化代码,这将放映在不久以后我们带给你所有的内容之中。
Keep coding strong!
代码
CallbacksAreYourFriend on Github