在sproutcore中检测window.unload的正确方法是什么

时间:2010-06-27 22:44:02

标签: sproutcore

我希望确保在用户导航离开页面之前将数据保存在我的sproutcore应用程序中。在Sproutcore中执行此操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

Sproutcore没有特别批准的方式。但是我做了一件看起来像这样的事情:

在core.js

MyApp = SC.Object.create({

  // ...

  storeIsDirty: function(){
    var statuses = this.store.statuses, storeKey;
    for(storeKey in statuses){
      if (statuses[storeKey] & SC.Record.DIRTY) return YES;
    }
    return NO;
  },

  storeIsBusy: function(){
    var statuses = this.store.statuses, storeKey;
    for(storeKey in statuses){
      if (statuses[storeKey] & SC.Record.BUSY) return YES;
    }
    return NO;
  }

});

然后在main.js

window.onbeforeunload = function(){
  var dirty = MyApp.storeIsDirty(),
    busy = MyApp.storeIsBusy();

  if (dirty || busy) {
    // User will be prompted with the return value
    return 'You have unsaved changes and will lose them if you continue.';
  }
}

我知道这已经过期了,但我希望这可以帮助你或其他人。

如果您还有其他问题,请访问#sproutcore的IRC聊天室或查看sproutcore@googlegroups.com上的邮件列表。

答案 1 :(得分:1)

我假设数据是指记录。在这种情况下,您可以将MyApp.store的'commitRecordsAutomatically'属性设置为True。

或者,如果您可以检测到离开您网页的用户,则可以调用MyApp.store.commitRecords()。