0

在我的应用程序中,人们从 Window 1 到 Window 2 再到 Window 3 等等,所以导航是:Window 1 -> Window 2 -> Window 3

要从一个窗口转到下一个窗口,我使用导航组:

var main = Titanium.UI.createWindow({
    height:Ti.Platform.displayCaps.platformHeight,  
    width:Ti.Platform.displayCaps.platformWidth,  
    fullscreen:true, 
    navBarHidden : true,
});

var first = Ti.UI.createWindow({
    height:Ti.Platform.displayCaps.platformHeight,  
    width:Ti.Platform.displayCaps.platformWidth,  
    url:'main_windows/main.js',
    backButtonTitleImage : '../images/backb.gif',
    fullscreen:true, 
    navBarHidden : true,
});

var navGroup = Ti.UI.iPhone.createNavigationGroup({
    window:first
});

Ti.App.addEventListener('login', function(event)
{
    var lwin = Ti.UI.createWindow({
        height:Ti.Platform.displayCaps.platformHeight,  
        width:Ti.Platform.displayCaps.platformWidth,  
        url:'main_windows/login.js',
        barImage: 'images/lback.gif', 
        fullscreen:true, 
        backgroundColor: '#f7f7f7',
        navBarHidden : false,
        _parent : Titanium.UI.currentWindow,
        navGroup : navGroup,
        rootWindow : first 
    });

    navGroup.open(lwin);
});

first.navGroup = navGroup;

main.add(navGroup);

main.open();

~~~

然后在每个窗口中,我通过执行以下操作打开下一个窗口:

~~~

button1.addEventListener('click', function() {
    Ti.App.fireEvent('services', {
        zipcode : win.zipcode,
        user_id : win.user_id,
        user_uniqid : win.user_uniqid,
        user_name : win.user_name,
        user_email : win.user_email
    });
});

Ti.App.addEventListener('services', function(event) {
    var cwin = Titanium.UI.currentWindow;
    var swin = Titanium.UI.createWindow();

    swin.url = 'service.js';

    swin.zipcode = event.zipcode;
    swin.user_id = event.user_id;
    swin.user_uniqid = event.user_uniqid;
    swin.user_name = event.user_name;
    swin.user_email = event.user_email;

    swin.backgroundColor = '#f7f7f7';

    swin._parent = cwin;
    swin.navGroup = cwin.navGroup;
    swin.rootWindow = cwin.rootWindow;
    cwin.navGroup.open(swin);
});

~~~

当人们从 Window 1 -> Window 2 -> Window 3 开始时,这很有效,但当他们返回时则不行:

就像从窗口 1 -> 窗口 2 -> 窗口 3 -> 窗口 1 -> 窗口 2

发生这种情况时,我收到以下错误:

在意外状态下完成导航转换。导航栏子视图树可能会损坏。

我能做些什么来防止这种情况发生?

4

1 回答 1

0

您正在使用 的url属性打开多个 javascript 上下文createWindow,这将很快杀死您的系统内存,尤其是在两个以上重量级窗口的情况下。将每个窗口放入一个 CommonJS 模块。

这可能无法解决您的问题,但这是不好的做法,其副作用可能是原因。

//Dont do this!!

var first = Ti.UI.createWindow({
    ...
    url:'main_windows/main.js', // Bad, opens a new context
    ...
});

而是将它放在自己的 CommonJS 模块文件中,如下所示:

// main_windows/main.js

function MainWindow() {
    var self = Ti.UI.createWindow();
    // Do all the initialization you were doing to this window in 'main_windows/main.js'
    return self;
}
module.exports = MainWindow;

像这样实例化它:

var MainWindow = require('main_windows/main.js');
var first = new MainWindow();

这可以解决您的问题,或者至少将您的代码和资源分解为更易于管理的状态。

于 2012-09-26T23:16:19.520 回答