在 Backbone 中,有没有办法在不更改 URL 的情况下触发路由事件处理程序?
我的意思是我想触发一个路由处理程序,但我不想更改 URL。因此,我不想使用
router.navigate(route, {trigger: true});
因为这会导致 URL 发生变化。
在 Backbone 中,有没有办法在不更改 URL 的情况下触发路由事件处理程序?
我的意思是我想触发一个路由处理程序,但我不想更改 URL。因此,我不想使用
router.navigate(route, {trigger: true});
因为这会导致 URL 发生变化。
路由器本身连接到一个功能。简单的答案是直接调用该函数,只是绕过路由处理。
(function( $, Backbone ) {
var exports = window.app = window.app || {},
Router = Backbone.Router.extend({
// Here you declare what the routes are in your router
// and what functionality they should trigger.
routes: {
"help" : "help",
"search/:query" : "search",
"search/:query/p:page": "search"
},
// Declare route functions.
help : function() {},
search: function( query, page ) {}
});
// Export the router.
exports.router = new Router();
// Just a dummy object for calling the router.
var cookieMonster = {
init: function() {
// Do something on init.
// End with calling the route help function.
exports.router.help();
}
};
}(jQuery, Backbone));
cookieMonster.init()
在这种情况下,将以调用help
路由器中的函数结束。
一个技巧是查看 Backbone Marionette,你有一个控制器,它的功能逻辑与路由分离,这是让 Marionette 很棒的许多事情之一。
对于它的价值,木偶路由在这里得到了广泛的解释:http: //samples.leanpub.com/marionette-gentle-introduction-sample.pdf
所讨论的策略是将 URL 管理与应用程序反应(例如切换子应用程序)分开。这意味着您可以在不修改 URl 片段的情况下让您的应用程序触发处理程序(使用 Marionette 事件)。
你试过Backbone.history.loadUrl(route);
吗?