骨干提取失败通知

时间:2013-02-11 17:03:03

标签: javascript html5 backbone.js

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

要触发对新内容的请求,我们必须先导航到新网址。如果没有返工,我们无法真正改变这一点,所以我们希望尽可能避免这种情况。我们需要做的是在发生连接错误时将用户发回到先前的URL,这将导致路由触发,重新请求先前的内容。但是我们真的想避免这样做。

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

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

有没有办法让我们想要一个对话,或者我们必须采取与Facebook / LinkedIn和co。相同的方式?

1 个答案:

答案 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