我是 Javascript 和backbone.js 的新手,所以希望我在这里遗漏了一些简单的东西。我正在尝试一些我发现的示例代码,这些代码应该在允许用户导航到另一个页面之前检查未保存的更改。我在这里创建了一个 JSfiddle:
代码订阅 hashchange 事件,如下所示:
$(window).on("hashchange", router.hashChange);
该router.hashChange
函数会检查“脏”标志以确定是否允许导航,如下所示:
hashChange: function (evt) {
if (this.cancelNavigate) { // cancel out if just reverting the URL
evt.stopImmediatePropagation();
this.cancelNavigate = false;
return;
}
if (this.view && this.view.dirty) {
var dialog = confirm("You have unsaved changes. To stay on the page, press cancel. To discard changes and leave the page, press OK");
if (dialog == true) return;
else {
evt.stopImmediatePropagation();
this.cancelNavigate = true;
window.location.href = evt.originalEvent.oldURL;
}
}
},
问题是代码不起作用,因为this.view
is undefined
,所以第二个 if 块永远不会输入。
我希望示例程序在离开页面之前始终要求确认(在我的示例程序中,我设置this.view.dirty
为 always be true
,这就是为什么它应该始终要求确认)。或者,如果有更好的方法,我愿意接受替代方案。