应用类型:移动 Titanium SDK:3.1.1.GA 平台版本:iOS 6.1 设备:iOS模拟器 主机操作系统:OSX 10.8.4 Titanium Studio:3.1.1.201306112235 parent_controller.js: _.each(category, function(inventory_item, index, list) {
> Titanium SDK:3.1.1.GA
>平台&版本:iOS 6.1
>设备:iOS模拟器
>主机操作系统:OSX 10.8.4
> Titanium Studio:3.1.1.201306112235
parent_controller.js:
_.each(category, function(inventory_item, index, list) { var row = Alloy.createController('inventory_list_row', { selectedBackgroundColor: '', data: inventory_item }); row.destroy(); row = null; }); Ti.App.fireEvent('checkIn');
inventory_list_row.js:
Ti.App.addEventListener('checkIn', function(e) { console.info('Checking In: ' + args.data.title); });
前言:上面的代码被淡化以证明一点.我知道它并没有真正做任何事情,但确实存在问题.
parent_controller.js中的代码可以根据我的Titanium Mobile iPad应用程序中的用户交互执行多次.如果上面的代码只运行一切都很好.每次上面的代码再次运行时,先前的控制器是一些如何保留在内存中并仍在捕获事件.
例如,假设第一次执行代码时生成了3个inventory_list_row控制器.在控制台中,我将看到3个“正在检入”消息按预期显示.但是,它第二次运行时,我会看到6“检入”消息出现在控制台中,依此类推.
为什么会这样,我该怎么做才能防止这种情况发生?您可以看到我尝试使用.destroy并将行设置为null无效.
>您可能需要在.的destroy方法中删除eventListener控制器.
>为什么要使用全局事件监听器进行本地事件管理?
>也许你可以使用回调代替
这些只是一些快速的观察,我没有编写任何代码来进行验证.老实说,我根本不使用全球事件.