【发布时间】:2015-08-21 13:26:27
【问题描述】:
上下文
单页/ajax 网页应用
基本代码结构
LocationManager(负责更新浏览器哈希并将应用程序位置切换到不同的磁贴)
页面/磁贴流
基本信息>家庭信息>车辆信息>购买选项>查看订单>输入付款并提交
问题
当用户从“购买选项”导航到“查看订单”时,会进行长时间(5-8 秒)的服务调用来计算订单详细信息。在呼叫解决后,回调旨在将用户导航到“查看订单”页面。问题是,如果用户在此期间点击返回并返回家庭信息,一旦呼叫解决,他们将被“自动”带到查看订单。非常尴尬的用户体验。
限制
取消通话不是一种选择。需要一个解决方案来处理导航。
当前提议的实施
在调用 calculateOrder 之前保存“currentLocation”。
将回调中的“currentLocation”作为expectStartingPoint 传递给setLocation 方法。
setLocation 方法里面if(intendedStartingPoint === Locationmanager.currentLocation) {//Navigate}
总而言之,如果用户在通话过程中更改了位置,那么在通话解决后,我们将不会导航,因为此时用户不希望导航到 Review Order。
这行得通,对吧?
渔获
我们在应用程序中有很多地方在回调中调用 setLocation 以进行长时间运行的调用。这意味着我将不得不使用一个新参数--expectedStartingPoint 来更新所有的 setLocation 调用。虽然这对我来说很有意义,但它似乎确实有可能变得有点混乱。
关于如何清理和集中它的任何想法?
【问题讨论】:
-
将 setLocation 调用包装在一个专门的函数中,将其提供给 Review Order 回调,并使该专门的函数也以一个预期的起始点作为参数并处理预期的起始点逻辑?
-
在呼叫返回之前禁用后退按钮(或任何操作)怎么样?否则,只需在呼叫返回时检查您当前的位置,并仅在正确的磁贴上进行重定向。 (注意:在这种情况下,仍然可能存在用户返回,修改一些数据,然后返回到正确的磁贴而不重新启动调用的问题,导致在没有保存/验证新数据的情况下被重定向,所以你应该在最少自动重新启动数据更改调用,但简单地取消导航/数据更改调用会更理想。)
-
@SzabolcsPáll 无法从网站内“禁用”浏览器按钮。您提出的解决方案是我在问题中概述的。
-
然后@Soggiorno 的建议似乎是正确的方法,但我真的不明白完成可能需要重复的呼叫的意义。关于浏览器后退按钮,您还可以暂停根据您的 URL 更改磁贴的功能,直到调用返回,从而阻止该导航。
-
请删除java标签(如果我理解正确的话)
标签: javascript asynchronous navigation code-structure