gpt4 book ai didi

ember.js - willTransition 被调用两次

转载 作者:行者123 更新时间:2023-12-02 12:18:13 25 4
gpt4 key购买 nike

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

设置:我正在使用 EmberJS.com's Routing guide 中的几乎完全相同的代码。 .

export default Ember.Route.extend({
actions: {
willTransition(transition) {
if (this.controller.get('userHasEnteredData') &&
!confirm("Are you sure you want to abandon progress?")) {
transition.abort();
} else {
// Bubble the `willTransition` action so that
// parent routes can decide whether or not to abort.
return true;
}
}
}
});

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

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

我尝试在 ember-twiddle.com 上进行复制,但在那里工作正常,仅调用 willTransition 一次。如果它确实在我的代码中被调用两次,我无法弄清楚为什么,因为我已经检查并仔细检查过,并且我看不出有什么不同会导致在 transition 之后再次调用钩子(Hook).abort() 运行。

有什么线索吗?

编辑我进一步简化了willTransition,仅此而已,并且它仍然运行两次。看来 transition.abort() 调用了 willTransition(),尽管这没有任何意义!

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

最佳答案

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

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

就我而言,这个问题与我在任何一种情况下从 willTransition 返回 true 的事实有关(无论是处理未保存的更改,还是不是)。我错误地认为 transition.abort() 就足够了。

return 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
}

关于ember.js - willTransition 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42236298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com