我使用此方法导航到url,触发事件而不是将url推送到浏览器历史记录。但是Backbone.history.navigate(url,{trigger:true, replace: true})
会从历史记录中替换以前的网址。
示例:浏览器hystory
之前
localhost:port/url
Backbone.history.navigate(url + '/list',{ trigger:true, replace: true })
预期:在路线url + '/list'
和浏览器历史记录localhost:port/url
上触发事件
实际上:触发事件但浏览器历史记录localhost:port/#url/list
。
之前的网址已被替换
答案 0 :(得分:14)
以下是我认为你问的问题,如果我错了,请纠正我:
“如何在不更新URL的情况下在Backbone中触发路由?”
快速回答:
你做不到。 replace
选项也无法帮助您。这是文档的片段:
要更新URL而不在浏览器的历史记录中创建条目,请将replace选项设置为true。
如您所见,替换不会影响对URL的更新。
后续回答:
如果您不希望更新网址,这会让我觉得在您的应用程序中显示列表不是对您的应用程序状态的重大更新。如果这是真的,那么根据我的经验,你不应该使用Backbone.history
对象来管理它。
如果您直接(例如通过某项功能)或间接(例如,通过调度事件)调用此功能,那么您的应用会更新,而您的网址则不会。
我喜欢Derick Baily's Post关于如何设置路由器结构。它有点冗长但值得一读。
另外,请查看David Sulc's repo以获取“木偶的温柔介绍”。我知道它使用 Marionette.AppRouter 对象,但是主体仍然是正确的。 Check out this file举个例子。
作为旁注,如果问题是#
; check out this SO answer。但请注意,hashChange
选项主要用于x-browser兼容性according to the docs。