当前位置 : 主页 > 手机开发 > 无线 >

在销毁控制器后触发的Titanium应用程序事件

来源:互联网 收集:自由互联 发布时间:2021-06-10
应用类型:移动 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
控制器.
>为什么要使用全局事件监听器进行本地事件管理?
>也许你可以使用回调代替

这些只是一些快速的观察,我没有编写任何代码来进行验证.老实说,我根本不使用全球事件.

网友评论