首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backbone.js PushState True

Backbone.js PushState True
EN

Stack Overflow用户
提问于 2015-02-04 14:28:14
回答 2查看 6.9K关注 0票数 3

我在主干中创建了一个站点,出于各种原因,我决定删除URL中的散列。我把history.start从

代码语言:javascript
复制
Backbone.history.start(); 

代码语言:javascript
复制
Backbone.history.start({pushState: true, root: '/'});

但是一旦我这样做,路由就停止工作了。

我的路线是这样的:

代码语言:javascript
复制
var Router = Backbone.Router.extend({
  routes: {
    "": "home",
    "home": "home",
    "artists": "artists",
  }
});

var router = new Router;
router.on('route:home', function() {
  console.log("home");
  // Code
});

router.on('route:artists', function() {
  console.log("artists");
  // Code
});

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

如果我在没有pushState的情况下运行它,它可以正常工作,如果我用pushState运行它,它不会到达console.log("artists");部分,我也不明白为什么,有人能解释我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-04 14:49:56

您需要防止a元素进行常规操作,并让骨干路由器路由它。

我将使用jQuery编写示例,概述应该发生的事情:

代码语言:javascript
复制
$(document).on("click", "a", function(e)
{
    e.preventDefault(); // This is important

    var href = $(e.currentTarget).attr('href');

    router.navigate(href, true); // <- this part will pass the path to your router

});
票数 9
EN

Stack Overflow用户

发布于 2015-02-11 18:07:03

现在我明白了为什么在文档中没有需要全局覆盖标记行为。我认为我们打算在视图中使用句柄导航,如下所示:

代码语言:javascript
复制
MyView = Backbone.View.extend({
  events: {
    "click a.foo": "foo"
  },

  foo: function(e){
    e.preventDefault();
    history.navigate("foo");
    $("#output").append("foo");
  }
});

但是,如果我们想保留在标记中使用简单的HREF的选项,我们必须拦截点击行为,如上面所示。

如果您有一个混合应用程序,一些链接到主干,还有一些强制页面刷新,那么对于每个链接来说,preventDefault()都是不正确的。链接到应用程序的其他部分将被打破。

您可以使用上述变化,并利用这样一个事实:如果没有内部视图可导航,Backbone.history.navigate()将返回false。

代码语言:javascript
复制
$(document).on("click", "a", function(e)
{

    var href = $(e.currentTarget).attr('href');

    var res = Backbone.history.navigate(href,true);
    //if we have an internal route don't call the server
    if(res)
        e.preventDefault();

});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28323836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档