Titanium保存查看的最后一个窗口的状态

时间:2014-09-30 02:53:08

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

我如何保存应用程序上次查看窗口的状态?

我一直在尝试使用titanium.app.properties而没有运气。我正在使用MVC所以所有内容都分成了单独的文件。我会通过在模型中创建几个全局变量并使用app.properties调用它来解决这个问题吗?如果您能提供帮助,请举例说明一下吗?

感谢您提供任何帮助< 3

3 个答案:

答案 0 :(得分:1)

Pageflow Widget有一个如何处理这个问题的例子。

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

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

答案 1 :(得分:1)

  1. 当应用启动时,即$.index.open()保存属性,Ti.App.Properties.setString("lastwin",nameofwindow)
  2. 每当您从此窗口打开任何其他窗口时,请保存字符串中窗口的名称。
  3. 每个窗口的焦点事件中的
  4. 也会更新string.something中的名称:

    window.addEventListener( “焦点”,函数(){

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

    });

  5. 希望它有所帮助。

答案 2 :(得分:1)

所以我已经能够通过简单地按照另一个答案中的说明来实现它。感兴趣的人如下

//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();
});