【发布时间】:2013-12-25 03:53:43
【问题描述】:
在我的shell.js 中,我在 UI 中有一些选项,用户可以在导航到child.js vm 之前选择这些选项。 child.js vm 需要提供此选项数据。
如果我直接导航到#/child,目前我会收到一些错误,因为尚未提供此数据。这是预期的行为......虽然我想以某种方式保护 child.js 视图不被直接访问。
理想的情况是,如果用户在子视图上刷新页面或直接导航到它(可以通过检查所需的选项数据是否存在来捕获),我通过不同的路线将它们推送到另一个视图。如果有所需的选项数据,我应该只能访问子 vm。
我试过这样做:
var vm = {
activate: activate
};
function activate() {
alert("ACTIVATED");
if (<check for data exists>) {
vm.data = ko.mapping.fromJS(<data>, mapping);
} else {
toastr.error("session data lost");
router.navigateTo("#/getdata");
}
};
return vm;
但是,当数据不存在时,我可以看到整个页面加载和activate 上面的代码在从 router.navigateTo 加载新视图之前运行。
如果某些数据不可用(首选),我如何才能在上面的任一 router.navigateTo 处完全退出虚拟机(并防止任何进一步执行),或者以某种方式保护路由甚至不加载虚拟机?
【问题讨论】:
标签: single-page-application durandal