即使模型无法在Ember上加载,如何保持应用程序正常工作

时间:2014-05-15 14:50:42

标签: javascript ember.js ember-data

所以,在我的ApplicationRoute我加载一个模型来加载一些整个应用程序通用的数据。工作流程如下:

App.ApplicationRoute = Ember.Route.extend({
    model: function() {
        return this.store.find('config');
    },
    actions: {
        error: function(error, transition) {
            var self = this,
                renderErrorPage = function(template, disableMenu) {
                    self.render(template, {
                        into: 'application'
                    });
                    if(disableMenu) {
                        $('.menu > a').addClass('disable-menu'); // disable menu links
                    }
                },

            metadata = {
                'timeout': {
                    action: function(error, transition) {
                       BootstrapDialog.alert({message: 'Request Timeout!'});
                    }
                },
                'forbidden': {
                    action: function(error, transition) {
                        self.transitionTo('companies');
                    }
                },
                'unauthorized': {
                    action: function(error, transition) {
                        window.location.replace(error.responseJSON.redirect_url);
                    }
                },
                'bad gateway': {
                    action: function(error, transition) {
                        renderErrorPage('error', true);
                    }
                },
                'internal server error': {
                    action: function(error, transition) {
                        renderErrorPage('error', true);
                    }
                },
                'not found': {
                    action: function(error, transition) {
                        renderErrorPage('404', false);
                    }
                }
            };

            if(error.statusText.toLowerCase() in metadata) {
                metadata[error.statusText.toLowerCase()].action(error, transition);
            }
        }
    }
});

因此,如果用户未登录,则会收到unauthorized 401错误,并将其重定向到登录页面,如果他已登录但仍无法访问此应用,他收到forbidden 403错误,只是转移到/#/companies/,他将注册他的公司,然后可以访问完整的应用程序。

我的问题是:由于模型无法加载,因此没有发生向companies的转换,我不知道如何修复它。

1 个答案:

答案 0 :(得分:0)

在我看来,您应该找到一种不同的加载配置方式,而不是通过对经过身份验证的API的请求(或者至少为不需要身份验证的路由提供开放版本,例如此错误页面)。您可以通过使用

逃脱
if (isAuthenticated) {
    return this.store.find('config');
}

...然后在身份验证过程中的某处设置isAuthenticated