改变场景的正确方法是什么?

时间:2011-11-25 20:37:36

标签: webos

当我做LUA时,我曾经运行dofile("...");来加载其他lua文件等。后来发现这是一个非常糟糕的做法,可能导致应用程序中断。

现在我正在开发WebO应用程序的过程中,我想确保在采用糟糕的编程习惯之前我正在改变场景。

目前这是我使用的:

label2Tap: function(inSender, event) {
    Mojo.Controller.stageController.popScene();
    Mojo.Controller.stageController.swapScene("LogicAndArithmetic");
},

这对于我的LogicAndArithmetic场景非常有用,这是最好的做法吗? 谢谢。

2 个答案:

答案 0 :(得分:2)

webOS的Mojo框架中的场景模型就像一个堆栈。当应用程序启动时,您调用pushScene以显示您的主要场景。通常情况下,您可以进行额外的pushScene调用以将场景添加到堆栈顶部,然后当您完成它们时,它们会弹出,通常是在用户执行“后退手势”时,会带回前一个场景。最终你会回到你的主要场景。

swapScene调用相当于为不同的场景调用popScene然后调用pushScene。在你的情况下,你正在调用popScene然后调用swapScene,这相当于从堆栈中弹出两个场景然后再推回一个场景。它可能有效,因为你只有一个场景,但如果你有更多的场景它将无法正常工作。

顺便说一句,你为什么和Mojo合作而不是Enyo?

答案 1 :(得分:2)

虽然这在技术上是正确的,但很可能不是用户期望您的应用行为的方式。通常,当用户按下打开新场景的按钮时,它被放置在堆栈上,正如Miguel所说。用户希望能够返回并将场景弹出堆栈。这会自动发生,您无需监听此输入。您可以通过调用Mojo.Controller.pushScene(“sceneName”);来完成此操作。虽然有些应用程序中swapScene有意义,但您的应用程序可能被概念化为一堆场景,具有逻辑“后退”场景。

我会建议玩一些现有的应用程序来了解它们的行为方式。此外,虽然Miguel建议搬到Enyo,但值得注意的是,Enyo应用程序并非正式应用于webOS 2设备(手机),只能在触控板上使用。可以在webOS 2设备上运行它们,但我相信它们会被应用程序目录拒绝。