Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js和pushState_Javascript_Backbone.js - Fatal编程技术网

Javascript Backbone.js和pushState

Javascript Backbone.js和pushState,javascript,backbone.js,Javascript,Backbone.js,如果我在主干路由器中启用pushState,我是否需要在所有链路上使用return false,或者主干路由器是否自动处理此问题?是否有任何示例,包括html部分和脚本部分 这是Tim Branyen在他的作品中使用的模式: 使用这种方法,而不是单独对链接执行默认操作,您可以让路由器默认处理它们,并通过使用数据旁路属性来进行异常处理。根据我的经验,它作为一种模式很有效。我不知道有什么好的例子,但自己尝试一下应该不会太难。脊梁骨的美在于它的简单;) match()或startsWith()(ES

如果我在主干路由器中启用pushState,我是否需要在所有链路上使用return false,或者主干路由器是否自动处理此问题?是否有任何示例,包括html部分和脚本部分

这是Tim Branyen在他的作品中使用的模式:

使用这种方法,而不是单独对链接执行默认操作,您可以让路由器默认处理它们,并通过使用
数据旁路
属性来进行异常处理。根据我的经验,它作为一种模式很有效。我不知道有什么好的例子,但自己尝试一下应该不会太难。脊梁骨的美在于它的简单;)

match()
startsWith()
(ES 6)也可用于检查协议。如果您想通过
路径名
属性支持绝对URL,请通过
位置.origin
检查基本URL

功能(evt){
var目标=evt.currentTarget;
var href=target.getAttribute('href');
如果(!href.match(/^https?:\/\/)){
Backbone.history.navigate(href,true);
evt.preventDefault();
}
//或
var协议=target.protocol;
如果(!href.startsWith(协议)){
// ...
}
//或
// http://stackoverflow.com/a/25495161/531320
如果(!window.location.origin){
window.location.origin=window.location.protocol
+“//”+window.location.hostname
+(window.location.port?:“+window.location.port:”);
}
var absolute_url=target.href;
var base_url=location.origin;
var pathname=target.pathname;
if(绝对url.startsWith(基本url)){
Backbone.history.navigate(路径名,true);
evt.preventDefault();
}
}

您可以防止在html中单击标签的默认行为。只需在
标记中添加以下代码

<script>
$(document).on("click", "a", function(e)
{
    e.preventDefault();
    var href = $(e.currentTarget).attr('href');
    router.navigate(href, true);router
});
</script>

$(文档)。在(“单击”,“a”,函数(e)
{
e、 预防默认值();
var href=$(e.currentTarget).attr('href');
router.navigate(href,true);router
});

只是提醒一下-我注意到IE7在某些情况下返回了绝对URL,而我期望的是相对URL。要处理这种情况,您需要在调用navigate之前将
href
的值标准化为一个相对路径。只是好奇,(href.slice(protocol.length)!==protocol)在做什么?这可能会有所帮助,它会说“确保协议不是URL的一部分,意思是它的相对路径。”这样说,看起来会更容易(也不那么迟钝)我在样板项目的任何地方都找不到上面关于锚处理的片段。项目是否已清空?是否应该
href.slice(protocol.length)
实际上是
href.slice(0,protocol.length)
 $(document.body).on('click', 'a', function(e){
   e.preventDefault();
   Backbone.history.navigate(e.currentTarget.pathname, {trigger: true});
 });
<script>
$(document).on("click", "a", function(e)
{
    e.preventDefault();
    var href = $(e.currentTarget).attr('href');
    router.navigate(href, true);router
});
</script>