【问题标题】:Titanium Saving the state of the last window viewedTitanium 保存上次查看的窗口的状态
【发布时间】:2014-09-30 02:53:07
【问题描述】:

我将如何保存我的应用程序的最后查看窗口的状态?

我一直在尝试 Titan.app.properties,但没有成功。我正在使用MVC,所以所有内容都被拆分为单独的文件。我会通过在模型中创建几个全局变量并使用 app.properties 调用它们来解决这个问题吗?如果你能帮忙,你能举个例子吗?

感谢您的帮助

【问题讨论】:

    标签: javascript model-view-controller titanium titanium-mobile


    【解决方案1】:
    1. 当应用程序启动时,即使用$.index.open()保存属性,即Ti.App.Properties.setString("lastwin",nameofwindow)
    2. 当您从此窗口打开任何其他窗口时,将窗口名称保存在字符串中。
    3. 在每个窗口的焦点事件中也更新字符串中的名称。类似于:

      window.addEventListener("focus",function(){

       Ti.App.Properties.setString("lastwin",window);
      

      });

    希望对你有帮助。

    【讨论】:

    • 这很有帮助,但我不熟悉您所说的焦点事件。它的目的是什么?在做诸如保存窗口状态之类的事情时是否必要?
    【解决方案2】:

    Pageflow 小部件有一个示例说明如何处理此问题。

    有一个全局变量保存所有已初始化的页面并将它们推送到一个数组中,如堆栈。

    var newPageView = newPage.getView();
    pageflow.pages.push(newPage);
    

    然后它有一个后处理程序:

    getPreviousPage: function() {
            if (pageflow.pages.length >= 2) {
                return pageflow.getPage(pageflow.getCurrentPageId() - 1);
            } else {
                return null;
            }
        },
    
    
    back: function() {
            var previousPage = pageflow.getPreviousPage();
        if (previousPage) {
            var currentPosition = pageflow.getGridCoordinatesForPage(pageflow.getCurrentPageId() - 1);
    
            $.pageflow.animate({ left: currentPosition.left, top: currentPosition.top, duration: 300 }, function() {
                $.pageflow.left = currentPosition.left;
                $.pageflow.top = currentPosition.top;
                pageflow.removeLastPage(true, true);
            });
        }
    },
    removeLastPage: function(callPrePostHide, callPrePostShow) {
            var remove = pageflow.pages.pop();
            remove.removeEventListeners();
        if (callPrePostHide) {
            remove.preHide();
        }
    
        var removeView = pageflow.pagesViews.pop();
        $.pageflow.remove(removeView);
        pageflow.pagesGridPositions.pop();
    
        if (callPrePostHide) {
            remove.postHide();
        }
    
        var currentPage = pageflow.getCurrentPage();
    
        if (callPrePostShow && currentPage) {
            currentPage.preShow();
        }
    
        // move the grid to adapt its new dimensions
        var currentPageId = pageflow.getCurrentPageId();
        var currentPosition = pageflow.getGridCoordinatesForPage(currentPageId);
        $.pageflow.top = currentPosition.top;
        $.pageflow.left = currentPosition.left;
    
        // move all the page views
        _.each(pageflow.pagesViews, pageflow.fixPagePosition);
    
        // fix grid size
        var gridDimensions = pageflow.getGridDimensions();
        $.pageflow.width = gridDimensions.width;
        $.pageflow.height = gridDimensions.height;
    
        if (callPrePostShow && currentPage){
            currentPage.postShow();
        }
    },
    

    您可以通过下载并运行小部件来查看完整的工作代码。这段代码做了更多的事情,但是你可以看到他们的后退函数是如何工作的并记住前一个屏幕。

    https://github.com/jolicode/Badass-Pageflow

    【讨论】:

    • 作为一个愚蠢的混蛋,我忘了提到我是在 javascript 版本的钛中执行此操作的。只是代码不同会是同一个概念吗?
    • 让我重新表述一下,我使用的是 Titanium 的经典版本(Javascript)。
    • 这个概念可以调整。它将 Views/Windows 推送到堆栈上,然后引用该堆栈以在按下后退按钮时显示该堆栈。
    【解决方案3】:

    因此,我只需按照另一个答案中的说明进行操作即可使其正常工作。对于任何有兴趣的人它如下所示

    //This decides what screen it should open
    var lastwin = Ti.App.Properties.getString("lastwin");
    
    if ( lastwin == 'SavedList'){
        SavedList.open();
        SavedListNav.open();
    }
    else if (lastwin == 'tomList'){
        tomList.open();
        TomNav.open();
    }
    else if (lastwin == 'Recipes'){
        Recipes.open();
        RecipesNav.open();
    }
    else MainMenu.open();
    
    //in each function that leads to the specific screen you want do it like so
    SavedListsBTN.addEventListener('click', function(e){
        Ti.App.Properties.setString("lastwin", 'SavedList');
        SavedList.open();
        SavedListNav.open();
        MainMenuNav.close();
        MainMenu.close();
    });
    

    【讨论】:

      猜你喜欢
      • 2015-10-04
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多