Javascript 使用HTML5历史API的简单Knockout.js路由
我继承了一个knockout.js应用程序,该应用程序将于明天提交给客户端。该应用程序只有三个视图,但根本没有设置路由。最后一个请求是添加一些基本路由,以便用户可以直接进入“页面”。我正试图使用视图模型中的Javascript 使用HTML5历史API的简单Knockout.js路由,javascript,jquery,html,knockout.js,pushstate,Javascript,Jquery,Html,Knockout.js,Pushstate,我继承了一个knockout.js应用程序,该应用程序将于明天提交给客户端。该应用程序只有三个视图,但根本没有设置路由。最后一个请求是添加一些基本路由,以便用户可以直接进入“页面”。我正试图使用视图模型中的“pushState”实现这一点。例如,我有以下功能,它将用户带到目标视图(“页面”): 如果将“#outcouts”散列附加到url,则将用户发送到“outcouts”视图。这是指向正确的视图,但没有任何数据?任何人都有任何想法。我知道这是一个解决办法,但这是最后一分钟。IIRC,您必须在页
“pushState”
实现这一点。例如,我有以下功能,它将用户带到目标视图(“页面”):
如果将“#outcouts”散列附加到url,则将用户发送到“outcouts”视图。这是指向正确的视图,但没有任何数据?任何人都有任何想法。我知道这是一个解决办法,但这是最后一分钟。IIRC,您必须在页面上的某个位置设置
id=outlets
,以防止浏览器“重新加载”,但不确定。您希望在那里看到什么数据skipTest
?@skipTest,我最初在应用程序中加载JSON数据。加载JSON后我是否应该运行我的“哈希”条件?IIRC,你必须在页面的某个地方设置id=outcouts
,以防止浏览器“重新加载”,但不确定。你希望在那里看到什么数据skipTest
?@skipTest,我最初在应用程序中加载JSON数据。我应该在JSON加载后运行我的“hash”条件吗?
var masterViewModel = new MasterViewModel();
function MasterViewModel(){
var self = this;
self.objectivesVM = ko.observable(null);
self.goToObjectives = function () {
self.lifeStyleVM(null);
self.testVM(null);
self.formVM(null);
window.history.pushState(null, "Outcomes Page", "#outcomes");
$('#header-main').show();
$('body').scrollTop(0);
$('#splash').hide();
$('.navbar-nav li').removeClass('active');
$('.out-quiz').addClass('active');
// Starting level: Based on test results
var vm = new ObjetivesVM();
if(self.scoreVM() && self.scoreVM().testScore()){
vm.skipTest = ko.observable(false);
}
else{
// Starting level manual selection
console.log("test was not taken");
vm.skipTest = ko.observable(true);
}
self.objectivesVM(vm);
for (i = 1; i < 4; i++) {
document.getElementById('range-' + i).addEventListener('change', function(){
this.setAttribute('value', this.value);
})
}
}
<a data-bind="event: {click: $root.goToObjectives}" href="#">Outcomes Quiz</a>
if (window.location.hash === '#outcomes') {
masterViewModel.goToObjectives();
}