0

在学习 Appcelerator Titanium 时,我正在构建一个以包含 2 个标签的 Window 开头的应用程序。这两个标签 (onclick) 应该打开 2 个不同的窗口(每个都包含选项卡组)。

所以,在我的app.js我有:

Window = require('ui/handheld/ApplicationWindow');

在我的ApplicationWindow功能中:

    var window1 = Ti.UI.createWindow({
        backgroundColor:'#ffffff'
    });

    var label = Ti.UI.createLabel({ text: "Open first Window", top:10 });
    window1.add(label);

    var label2 = Ti.UI.createLabel({ text: "Open second Window", top:50 });
    window1.add(label2);

    var window2 = Titanium.UI.createWindow({url:"A.js",backgroundColor:'#00ff00'});
    var window3 = Titanium.UI.createWindow({url:"B.js",backgroundColor:'#ff0000'});

    label.addEventListener("click", function(e) {
    var t = Ti.UI.iPhone.AnimationStyle.CURL_UP;
    window1.animate({view:window2,transition:t},function(){window2.open();});
    });

    label2.addEventListener("click", function(e) {
    var t = Ti.UI.iPhone.AnimationStyle.CURL_UP;
    window1.animate({view:window3,transition:t},function(){window3.open();});
    }); 

    return window1;

第一个问题是:这是一个好的设计吗?是否可以改进?如何?

第二个问题是:有没有办法在过渡结束之前显示我正在打开的页面?目前看来,A.js 和 B.js 中包含的 JS 只有在动画停止时才会执行。

谢谢,欢迎任何帮助,并对新手问题感到抱歉。

[编辑] 这是 Ch4rAss 评论后我当前的代码:

function ApplicationWindow() {

    var root = Ti.UI.createWindow({
        backgroundColor:'#ffffff'
    });

    var label = Ti.UI.createLabel({ text: "Open first Window", top:10 });
    root.add(label);

    var label2 = Ti.UI.createLabel({ text: "Open second Window", top:50 });
    root.add(label2);

    var win2 = require('ui/handheld/Win2');
    var win3 = require('ui/handheld/Win3');

    label.addEventListener("click", function(e) {
    var t = Ti.UI.iPhone.AnimationStyle.CURL_UP;
    win2.open({transition:t});
    });

   label2.addEventListener("click", function(e) {
   var t = Ti.UI.iPhone.AnimationStyle.CURL_UP;
    win3.open({transition:t});
   }); 

    return root;
}

module.exports = ApplicationWindow;

和:

function Win2(){
        /* You can (of course) do more than this */
        return Ti.UI.createWindow({backgroundColor:'#00ff00'});
    }
module.exports = Win2;
4

1 回答 1

2

您应该将动画添加到open()方法中,以便在动画期间打开窗口:

window1.open({transition:Titanium.UI.iPhone.AnimationStyle.CURL_UP});

我建议为每个窗口使用单独的文件并使用 CommonJS require()。与您使用相同的方法 for ApplicationWindow。在您创建两个窗口并将它们加载到内存而不使用它们的那一刻!更好的是:

var Win1 = require('ui/handheld/WhateverWindow');
label.addEventListener("click", function(e) {
   var win1 = new Win1();
   win1.open({transition:Titanium.UI.iPhone.AnimationStyle.CURL_UP});
});

ui/handheld/WhateverWindow.js

(function() {
    var WhateverWindow = function() {
        /* You can (of course) do more than this */
        return Ti.UI.createWindow({backgroundColor:'#00ff00'});
    }
    module exports = WhateverWindow;
})();

你可以在这里阅读更多。

于 2012-11-12T15:15:13.170 回答