Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js willTransition被打了两次电话_Ember.js - Fatal编程技术网

Ember.js willTransition被打了两次电话

Ember.js willTransition被打了两次电话,ember.js,Ember.js,目标:如果当前路由的模型已更改(即用户已更新某些字段但未保存,即isDirty===true),则防止转换到另一个路由 设置:我使用的代码基本上都是来自 在我的控制器中,userHasEnteredData只是一个计算属性,用于监视模型的isDirty属性 问题:当我从确认框中选择取消时(即“取消转换以便我可以完成编辑”),确认框再次弹出。再次取消会使它永远消失,但我不知道为什么它会被击中两次。如果我改为说“确定”在第一次确认中,它继续进行并转换,而不会再次弹出确认。只有在取消第一次时,它才会立

目标:如果当前路由的模型已更改(即用户已更新某些字段但未保存,即
isDirty===true),则防止转换到另一个路由

设置:我使用的代码基本上都是来自

在我的控制器中,
userHasEnteredData
只是一个计算属性,用于监视模型的
isDirty
属性

问题:当我从
确认
框中选择取消时(即“取消转换以便我可以完成编辑”),确认框再次弹出。再次取消会使它永远消失,但我不知道为什么它会被击中两次。如果我改为说“确定”在第一次确认中,它继续进行并转换,而不会再次弹出确认。只有在取消第一次时,它才会立即再次弹出

我试图在ember-twiddle.com上进行复制,但在那里效果很好,只调用了一次
willTransition
。如果在我的代码中确实调用了两次,我不知道为什么,因为我已经检查了又检查了两次,而且我看不出有什么不同,会导致在
transition.abort()之后再次调用挂钩
运行

有什么线索吗

EDIT我对
willTransition
进行了更多简化,仅此而已,它仍然运行了两次。看来
transition.abort()
调用了
willTransition()
,尽管这毫无意义

actions: {
    willTransition: function(transition) {
      console.log('trying to transition');
      transition.abort();
    }
  }
}
//logs 'trying to transition' to the console twice!

下面的解决方案对我来说很好。
willTransition
不会被调用两次

willTransition(transition) {
  if (this.controller.get('model.hasDirtyAttributes') && !confirm("Are you sure you want to abandon progress?")) {
    transition.abort();
  } else {
    this.controller.get('model').rollbackAttributes();
  }
}

对于可能有类似问题的任何人:

调用
transition.abort()
(试图处理未保存的更改)时,我遇到了
willTransition
被触发两次的问题

在我的例子中,这个问题与我从
willTransition
返回
true
这两种情况有关(无论我是否处理未保存的更改)。我错误地认为
transition.abort()
就足够了

一旦我将
返回true;
移动到我的
hasChanges
if
语句的else条件中,问题就解决了

willTransition(transition) {
    if (this.controller.get(model.hasDirtyAttributes)) {
        // Handle unsaved changes...
        // ...then `transition.retry()`
    } else {
        return true; // <-- this worked
    }

    // return true; <-- this fired `willTransition` twice
}
willTransition(转换){
if(this.controller.get(model.hasDirtyAttributes)){
//处理未保存的更改。。。
//…然后“transition.retry()`
}否则{

return true;//如何在模板中定义取消操作?@SteveH。模板没有取消操作,因为这些可选字段不需要取消操作。如果用户转到此页面并且不想输入任何内容,他们可以转到其他页面。在三年后的Ember 2.11中,在你的旋转中,它不会复制,我有同样的问题。有什么想法吗?@paozac:没有,对我来说仍然是个问题。我发现只有在尝试转换到另一个嵌套路由时才会发生这种情况,而不是在上面完全不同的路由。例如,如果尝试从
post.edit
转换到
post.comments
时,确认会弹出两次,但在尝试转到fr时只会弹出一次om
post.edit
to,比如说
profile
willTransition(transition) {
    if (this.controller.get(model.hasDirtyAttributes)) {
        // Handle unsaved changes...
        // ...then `transition.retry()`
    } else {
        return true; // <-- this worked
    }

    // return true; <-- this fired `willTransition` twice
}