Backbone.js 触发阻止默认代码执行的事件

Backbone.js 触发阻止默认代码执行的事件,backbone.js,Backbone.js,我正在开发一个基于身份验证的应用程序,用户必须登录才能访问网站的特定路径。我还没有找到关于如何实现这一点的文档,所以我研究了如何解决它 这是我了解用户是否已登录的功能: App.filterAuth = function(navigateTo) { navigateTo = typeof navigateTo !== 'undefined' ? navigateTo : '#'; if (App.logged == false) { App.vent.trigg

我正在开发一个基于身份验证的应用程序,用户必须登录才能访问网站的特定路径。我还没有找到关于如何实现这一点的文档,所以我研究了如何解决它

这是我了解用户是否已登录的功能:

App.filterAuth = function(navigateTo) {
    navigateTo = typeof navigateTo !== 'undefined' ? navigateTo : '#';

    if (App.logged == false) {
        App.vent.trigger('navigate', navigateTo);
    }
};
我的想法是,当用户登录时,设置
App.logged=true
。然后,当我的路由器试图执行一个具体的路由器时,我可以调用
App.filterAuth()
。这实际上是可行的,在进行一些调试时,我看到所有的触发都得到了纠正

问题出在哪里?例如,我在为用户加载图像提要的受保护路由上执行此操作。执行
App.filterAuth()
时,我看到它试图导航到
,但此提要视图的执行未停止,并且与我的
路由关联的视图也未触发

关于如何改进此功能以使其正常工作,您有什么想法吗


提前谢谢

这可能不是对问题的直接回答,但有一个主干插件可以帮助您尝试做什么:

您可以指定其他方法,这些方法将在处理路线代码之前/之后触发。如果在回调之前返回false,则不会计算路由器代码:


所以,您可以创建before过滤器,它可以检查路由是否应该安全。如果它是安全的,并且用户没有经过身份验证,那么您只需返回false,并且不使用路由器代码。

您的意思是url将只导航到
example.com/#
,而不使用任何路由器?您是否使用
event.preventDefault()
阻止任何传播?@dbf:谢谢!不,我没有使用
event.preventDefault()
,因为我不知道在我的函数中哪里可以使用它。有什么建议吗?为什么不创建一个单独的
主干.Router
,并在您设置
应用程序登录时实例化它?或者在您现有的路由器上设置路由?@fbynite我没有想到这个选项,谢谢!我将尝试建议的插件和您指出的这个选项。谢谢@udexter,我在这里回答了一个类似的问题,它也可以用来解决你的问题。