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时只会弹出一次ompost.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
}