2

我的问题是:

所有的 HTML 都在一个<div id="application">容器中,默认情况下是0不透明的。这是因为 JavaScript 做了一些 DOM 定位,所以当这一切都完成后,我只需在 中添加一个class="rendered"<div id="application>"然后页面就会出现。

所以问题是,对于我的主干路由器中的每条路由,我都需要在实际路由之前或每条路由上总是触发的东西,这可能吗?

感谢帮助!

4

2 回答 2

10

Backbone.Router当路由触发时发出事件,因此您可以绑定到特定事件或all捕获所有有效的路由更改。event 参数将包含路由回调名称:

var MyRouter = Backbone.Router.extend({
    routes: {
        "foo": "bar"
    },

    initialize: function() {
        this.on('all', function(routeEvent) {
            // If you had clicked #foo, routeEvent would contain
            // `route:bar`. You can trigger your CSS changes here.
        });
    }
});

我觉得这种代码在视图中会更好,但这应该可以满足您的要求。

于 2012-10-07T21:44:06.493 回答
2

您可以在路由器中定义一种带有参数的方法。然后对于每条路由,调用该方法并传入一个参数,该参数将用于确定要渲染的视图。在方法的开始,您可以定义您想要发生的任何“在每个路由器呼叫”逻辑。

例如:

routes:
    "": "renderPage"
    ":page": "renderPage"


renderPage: (page) ->
// check if page is defined, if not render index, if it is, render that page
于 2012-10-07T21:29:22.967 回答