Javascript 主干js在返回/转发时防止url哈希更改
我正在使用Backbone.js开发一个非常基本的SPA。我的应用程序几乎没有路由。其中有两个问题:索引路径(“/#索引”)和菜单路径(“/#主菜单”) 我的应用程序中的一个简单工作流如下:用户填写表单->单击登录->触发ajax请求->如果登录成功,则转到“/#主菜单”路径。如果登录失败,请继续使用“/#索引”路径。 在“/#主菜单”上,如果用户单击注销->ajax请求->如果注销成功,则转到“/#索引”。如果注销失败,则保持在“/#主菜单”上 我正在努力解决的问题是:Javascript 主干js在返回/转发时防止url哈希更改,javascript,backbone.js,url-routing,Javascript,Backbone.js,Url Routing,我正在使用Backbone.js开发一个非常基本的SPA。我的应用程序几乎没有路由。其中有两个问题:索引路径(“/#索引”)和菜单路径(“/#主菜单”) 我的应用程序中的一个简单工作流如下:用户填写表单->单击登录->触发ajax请求->如果登录成功,则转到“/#主菜单”路径。如果登录失败,请继续使用“/#索引”路径。 在“/#主菜单”上,如果用户单击注销->ajax请求->如果注销成功,则转到“/#索引”。如果注销失败,则保持在“/#主菜单”上 我正在努力解决的问题是: 成功登录后触发转换到“
欢迎您提供任何反馈,我们对此深表感谢。解决此问题的一种方法是,在执行实际回调路由之前,对需要进行身份验证状态检查的路由应用异步
before
过滤器
例如:
避免{trigger:true}的原理基于这样一个事实:当路由器被这个标志触发时,该路由的整个初始化过程都会被触发。您将失去以前定义AppState的好处,因为应用程序必须重新初始化所有内容,而这项工作以前已经完成过
实际上,我认为评估web应用程序的实际功能是很有用的。如果丢失appstate不是一个问题,因为您要呈现的视图是全新的,那么我认为创建客户端重定向以重新初始化您的应用不会有问题。另一方面,如果您的应用程序已经渲染了许多视图,并且您希望这些视图保持与以前相同的状态,那么您可以在每个需要验证状态的组件上侦听验证状态事件,并在需要时仅对这些视图进行相应的重新渲染 解决此问题的一种方法是,在执行实际回调路由之前,对需要验证状态检查的路由应用异步
before
过滤器
例如:
避免{trigger:true}的原理基于这样一个事实:当路由器被这个标志触发时,该路由的整个初始化过程都会被触发。您将失去以前定义AppState的好处,因为应用程序必须重新初始化所有内容,而这项工作以前已经完成过
实际上,我认为评估web应用程序的实际功能是很有用的。如果丢失appstate不是一个问题,因为您要呈现的视图是全新的,那么我认为创建客户端重定向以重新初始化您的应用不会有问题。另一方面,如果您的应用程序已经渲染了许多视图,并且您希望这些视图保持与以前相同的状态,那么您可以在每个需要验证状态的组件上侦听验证状态事件,并在需要时仅对这些视图进行相应的重新渲染
window.history.forward()
禁用。第二,我最喜欢的,是在计算机中进行处理。A可能看起来像:execute:function(回调、参数、名称){
如果(!loggedIn){
goToLogin();
return false;//特权路由不会触发
}
if(callback)callback.apply(this,args);
}
window.history.forward()
禁用。第二,我最喜欢的,是在计算机中进行处理。A可能看起来像:execute:function(回调、参数、名称){
如果(!loggedIn){
goToLogin();
return false;//特权路由不会触发
}
if(callback)callback.apply(this,args);
}
谢谢您的回答。我没有想过直接使用历史api。这似乎是一个可靠的好主意。我将尝试这种方法。我使用的“hacky”解决方案看起来与上面的示例代码非常相似。但根据我的经验,按后退/前进将更改url哈希,并且必须手动调整它。我希望有更好的解决办法。谢谢你的反馈。谢谢你的回答。我没有想过直接使用历史api。这似乎是一个可靠的好主意。我将尝试这种方法。我使用的“hacky”解决方案看起来与上面的示例代码非常相似。但根据我的经验,按后退/前进将更改url哈希,并且必须手动调整它。我希望有更好的解决办法。感谢您的反馈。感谢您对避免{trigger:true}
的解释以及您的反馈。感谢您对避免{trigger:tr>的解释