如何将Backbonejs路由器与Twitter引导选项卡结合起来?

时间:2014-06-11 09:35:46

标签: javascript jquery twitter-bootstrap backbone.js tabs

我已经将一些jQuery代码与bootstrap相结合,我想在其中更改一些内容,以便我可以使用Backbone.js。我已经走得很远了,但现在我在使用的标签上遇到了一些麻烦。我基本上使用this Twitter bootstrap example。我设法显示选项卡的内容,但选项卡本身看起来并不活跃,哪种让用户不知道哪个选项卡实际打开了。所以我所做的就是让标签看起来很活跃。

标签本身的定义如下:

<a id="tab1" href="#/ticket/1">1 Blah Blah</a>

我曾经使用此代码将标签设置为活动:

$("#pageTab").on("click", "a", function (event) {
    event.preventDefault();
    $(this).tab('show');
});

不幸的是我使用Backbone.js更改了标签的路由,然后我尝试显示标签的内容,如下所示:

var Router = Backbone.Router.extend({
    routes: {
        "": "home",
        "ticket/:ticketId": "ticket"
    }
});

var router = new Router();
router.on("route:ticket", function(ticketId) {
    tabContentView.render({ticketId: ticketId}); // This works
    $(this).tab('show'); // This does not work
});
Backbone.history.start();

我想问题是this在这里没有引用标签本身。所以我尝试使用:

$("#tab"+ticketId).tab('show');

但不幸的是,这也不起作用。

有人知道如何解决这个问题吗?欢迎所有提示!

[编辑] 是否无法从路由器获取网址上的点击事件,以便我可以将其与.tab("show");一起使用?

1 个答案:

答案 0 :(得分:0)

无法在路由器中获得点击事件,但您可以随时决定在所需的标签上触发点击事件。

router.on("route:ticket", function(ticketId) {
    tabContentView.render({ticketId: ticketId});
    $("#tab" + ticketId).trigger('click');
}