Ember.js:如何使用异步确认阻止脏模型的转换?

Ant*_*ell 8 javascript ember.js ember-data

我有一个非常常见的情况:有一个脏模型,如果用户试图转换到任何其他路线,我想显示确认.

我有这样的东西与window.confirm确认对话框一起工作:

var EventRoute = Ember.Route.extend({
  actions: {
    willTransition: function(transition) {
      var event = this.modelFor(this.routeName);
      if (event.get('isDirty') && !confirm("Are you sure?")) {
        transition.abort();
      } else {
        event.rollback();
        return true;
      }
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我想使用异步确认(例如bootbox.js确认),我该如何停止转换?

我试图回来,Ember.RSVP.Promise但似乎willTransition不支持承诺.

所以问题是如何通过异步确认来防止转换到另一条路线?

Kin*_*n2k 8

您可以使用abort取消/暂停转换,然后使用相同的转换实例调用retry以再次尝试转换.

在包含的示例中,我正在停止转换,然后在稍后再次启动它.您可以启动确认对话框,单击确定/取消后,使用转换对象继续转换.

willTransition: function(transition){
  var self = this;
  if(!this.get('allowTransition')){
    console.log('transition abort');
    transition.abort(); 

    Em.run.later(function(){
      self.set('allowTransition', true);
      console.log('transition retry');
      transition.retry();
   }, 1000);
 }
Run Code Online (Sandbox Code Playgroud)

http://emberjs.jsbin.com/gefituqo/1/edit