gpt4 book ai didi

javascript - Marionette 中的 Hook 后退按钮(onbeforeunload 不起作用)

转载 作者:行者123 更新时间:2023-11-30 17:29:45 25 4
gpt4 key购买 nike

我 Hook 了 window.onbeforeunload 事件和 Marionette.AppRouter.navigate 方法来检测页面导航并在导航前运行一些代码。

这些 Hook 在关闭页面或四处导航时触发,后退或前进按钮导航 (Chrome) 除外。

我可以处理路由事件并检测何时调用后退/前进按钮:

  Backbone.history.on('route', function(route, params) {
console.log('routing!');
});

但我希望能够在导航之前完成;扩展 execute应该让我这样做,但它不会被调用:

  _.extend(Backbone.Router.prototype, {
execute: function(callback, args) {
if (callback) callback.apply(this, args);
}
});

最佳答案

原来有效的方法是覆盖 Backbone.Router,然后添加逻辑以有条件地执行带有 callback.apply 的行:

  _.extend(Backbone.Router.prototype, {
route: function(route, name, callback) {
var that = this;
if (!_.isRegExp(route)) route = this._routeToRegExp(route);
if (!callback) callback = this[name];
Backbone.history.route(route, _.bind(function(fragment) {
var args = that._extractParameters(route, fragment);
if (myCustomLogic) {
callback && callback.apply(that, args);
that.trigger.apply(that, ['route:' + name].concat(args));
that.trigger('route', name, args);
Backbone.history.trigger('route', that, name, args);
}
}, that));
return that;
},
});

似乎浏览器前进/后退按钮由 Backbone.Router 处理,而其他导航则由 Marionette.AppRouter 处理。

关于javascript - Marionette 中的 Hook 后退按钮(onbeforeunload 不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com