gpt4 book ai didi

javascript - 在主干路由中包含根

转载 作者:行者123 更新时间:2023-12-02 07:07:31 25 4
gpt4 key购买 nike

我注意到我正在构建的 Backbone 应用程序中有一个小问题,我想知道这种行为是否符合预期,或者我是否做错了什么......

我像这样启动 Backbone.history:

Backbone.history.start({
root: '/au/store/',
pushState: true,
silent: true
});

要制作后退/前进按钮导航触发路线,我需要像这样设置它们:

router = Backbone.Router.extend({
routes: {
'au/store/:slug' : 'slug',
'au/store/?*params' : 'params'
}
});

这很好用。通过浏览器历史导航到 /au/store/?foo=bar 会按预期触发“params”路由。

我遇到的问题是 router.navigate() 不会触发路由:

router.navigate('?foo=bar', {trigger:true});   // route doesn't trigger

将根添加到 url 也不起作用:

router.navigate('au/store/?foo=bar', {trigger:true});  // navigates to /au/store/au/store/?foo=bar

所以我现在使用的解决方法是运行所有路由两次,一次带有根前缀,一次没有:

routes: {
'au/store/:slug' : 'slug',
'au/store/?*params' : 'params',
':slug' : 'slug',
'?*params' : 'params'
}

现在它会触发后退/前进路线以及通过 router.navigate()。

但这看起来有点像 hack,肯定会在更复杂的路线上引起问题......

任何人都可以向我解释我做错了什么,或者为什么它不像我期望的那样表现吗?

最佳答案

摆脱路由器中的网址

router = Backbone.Router.extend({
routes: {
':slug' : 'slug',
'?*params' : 'params'
}
});

silent设置为false以触发路由

Backbone.history.start({
root: '/au/store/',
pushState: true,
silent: false
});

If the server has already rendered the entire page, and you don't want the initial route to trigger when starting History, pass silent: true.

引用资料 http://documentcloud.github.com/backbone/#History-start

更新

您还应该使用 .htaccess 来处理根目录和重定向。你需要使用这样的东西:

# html5 pushstate (history) support:
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteBase /au/store/
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ /au/store/$1 [R,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule (.*) index.php
</ifModule>

并将其添加到您的 head 标签中

<base href="/au/store/" />

现在先生,您得到了一个完美的工作环境

关于javascript - 在主干路由中包含根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9372155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com