0

我们的主干应用程序有问题。我们希望在获取失败(超时或一般错误)时向用户提供通知,但我们希望在前一页的内容上显示一个对话框,而不是在新页面中显示错误消息(Facebook/LinkedIn 等如何做它)

要触发对新内容的请求,我们必须先导航到新 URL。如果不进行返工,我们就无法真正改变这一点,因此我们希望尽可能避免这种情况。我们需要做的是在连接错误时将用户返回到之前的 URL,这会导致路由触发,重新请求之前的内容。然而,我们真的想避免这样做。

我们知道我们可以在不触发路由的情况下使用导航将用户返回,但这会弄乱浏览器历史记录,在这种情况下使后退变为前进。我们也可以强制浏览器返回,正确保持历史记录,但这会强制重新获取内容。

我们还研究了设置某种标志,告诉我们的路由器不要在下一次路由更改时重新请求数据,但是当使用浏览器返回到上一个获取失败的屏幕时,这会导致问题。在这种情况下,我们需要在他们的旅程中向用户发送“转发”。据我们所知,使用浏览器的历史管理器是不可能的。

有什么方法可以按照我们想要的方式进行对话,还是我们必须像 Facebook/LinkedIn 和 co. 一样采用相同的方式?

4

1 回答 1

1

你有你的代码/你尝试过的例子吗?

离开你所说的,如果在你的 URL 更改后获取模型数据时出错,你可以使用路由器静默地将用户重定向回以前的 URL,例如:

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});

以下问题/答案完美地描述了这一点:

使用 Backbone.js 将 url 静默更改为以前的

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 
于 2013-02-11T17:55:49.007 回答