Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用HTML5历史API的简单Knockout.js路由_Javascript_Jquery_Html_Knockout.js_Pushstate - Fatal编程技术网

Javascript 使用HTML5历史API的简单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,您必须在页

我继承了一个knockout.js应用程序,该应用程序将于明天提交给客户端。该应用程序只有三个视图,但根本没有设置路由。最后一个请求是添加一些基本路由,以便用户可以直接进入“页面”。我正试图使用视图模型中的
“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();
}