我的问题是:
所有的 HTML 都在一个<div id="application">
容器中,默认情况下是0
不透明的。这是因为 JavaScript 做了一些 DOM 定位,所以当这一切都完成后,我只需在 中添加一个class="rendered"
,<div id="application>"
然后页面就会出现。
所以问题是,对于我的主干路由器中的每条路由,我都需要在实际路由之前或每条路由上总是触发的东西,这可能吗?
感谢帮助!
我的问题是:
所有的 HTML 都在一个<div id="application">
容器中,默认情况下是0
不透明的。这是因为 JavaScript 做了一些 DOM 定位,所以当这一切都完成后,我只需在 中添加一个class="rendered"
,<div id="application>"
然后页面就会出现。
所以问题是,对于我的主干路由器中的每条路由,我都需要在实际路由之前或每条路由上总是触发的东西,这可能吗?
感谢帮助!
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.
});
}
});
我觉得这种代码在视图中会更好,但这应该可以满足您的要求。
您可以在路由器中定义一种带有参数的方法。然后对于每条路由,调用该方法并传入一个参数,该参数将用于确定要渲染的视图。在方法的开始,您可以定义您想要发生的任何“在每个路由器呼叫”逻辑。
例如:
routes:
"": "renderPage"
":page": "renderPage"
renderPage: (page) ->
// check if page is defined, if not render index, if it is, render that page