我们的骨干应用程序存在问题。我们希望在提取失败时提供通知(超时或一般错误),但我们希望在上一页的内容上显示一个对话框,而不是在新页面中显示错误消息(Facebook / LinkedIn等如何做它)
要触发对新内容的请求,我们必须先导航到新网址。如果没有返工,我们无法真正改变这一点,所以我们希望尽可能避免这种情况。我们需要做的是在发生连接错误时将用户发回到先前的URL,这将导致路由触发,重新请求先前的内容。但是我们真的想避免这样做。
我们知道我们可以在不触发路由的情况下使用导航向用户发送回来,但这会弄乱浏览器历史记录,在这种情况下向后转变为前进。我们还可以强制恢复浏览器,正确保留历史记录,但这会强制重新获取内容。
我们还调查了设置某种标志,告诉我们的路由器不要在下一次路由更改时重新请求数据,但这会导致浏览器返回到前一个屏幕,其中提取失败。在这种情况下,我们需要在他们的旅程中向用户'转发'。据我们所知,使用浏览器的历史管理器是不可能的。
有没有办法让我们想要一个对话,或者我们必须采取与Facebook / LinkedIn和co。相同的方式?
答案 0 :(得分:1)
您是否有代码示例/您尝试过的内容?
关闭您所说的内容,如果在您的网址更改后获取模型数据时出错,您可以使用路由器以静默方式将用户重定向回以前的网址,例如:
window.product_v = Backbone.View.extend({
render: function() {
this.model.fetch({
processData: true,
data: this.model.attributes,
success : function(d){
},
error : function(d) {
MyRouter.previous();
}
})
}
});
然后在您的路由器中可以保留您的历史记录数组,以便在重定向时不会“触发”路由。或者只是做:
Backbone.history.navigate(route, {trigger: false, replace: true});
以下问题/答案完美地描述了这一点:
Silently change url to previous using Backbone.js
class MyRouter extends Backbone.Router
constructor: (options) ->
@on "all", @storeRoute
@history = []
super options
storeRoute: ->
@history.push Backbone.history.fragment
previous: ->
if @history.length > 1
@navigate @history[@history.length-2], true