BackboneJS路由

时间:2012-08-20 20:51:50

标签: javascript backbone.js backbone-routing

我的应用程序的索引页面位于http://cms/admin(我在localhost上)。在索引页面上只有一个a元素:

<a href="/admin/test">deneme</a>

当我点击链接时,它会转到/cms/admin/test

我想使用BackboneJS的路由机制将我的应用程序转换为ajax友好应用程序,但直到现在我都无法做到。这是我的JS代码:

$(function() {
    var AppRouter = Backbone.Router.extend({
        routes: {
            "test": "defaultRoute"
        },

        defaultRoute: function() {
            console.log('its here');
        }
    });

    var appRouter = new AppRouter();

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

当我运行页面并单击链接时,它不会将任何内容记录到控制台,浏览器会跟随链接。页面加载后,它会记录“此处”消息。

我已经尝试过没有root参数,“/ admin / test”而不是“test”。我尝试了各种组合:“test”,“/ test”,“test /”,“/ admin / test”,“admin / test”等。

感谢。

2 个答案:

答案 0 :(得分:3)

您必须覆盖链接的默认行为。

您必须在显式调用appRouter.navigate("test", {trigger: true});的页面之间移动。因此,请尝试在View.eventsprevent the default behavior of the link内的链接上捕获点击事件并致电appRouter.navigate()

更新

您也可以批量执行此操作:

$("a.bb_link").each( function( index, link ){
  $(link).click( function( event ){
    event.preventDefault();
    appRouter.navigate( $(this).attr( "href" ), {trigger: true} );
  });
});​

bb_link的每个链接都将使用Backbone.Router。

答案 1 :(得分:1)

尝试按如下方式设置锚标记:

<a href="#admin/test">deneme</a>

注意哈希(#)