访问页面两次后不显示数据

时间:2013-04-23 08:34:52

标签: javascript durandal

您好我正在使用Durandal,knockout和renderjs构建SPA应用程序,我似乎在从一个页面转到另一个页面时遇到了问题。

这就是我目前的模型:

define(['services/logger', 'services/dataService', 'durandal/plugins/router'],
function (logger, dataService, router) {
    var allModulesObservableCollection = ko.observableArray();
    var isInitialized = false;
    var activeSaIdParameter = "";

    var vm = {
        //bindable
        title: ko.observable(''),
        dataLoading: ko.observable(false),
        hasErrors: ko.observable(false),
        errorMessage: ko.observable(''),

        courseName: ko.observable(''),
        allModules: allModulesObservableCollection,

        //operations
        refreshData: refreshData,
        showActiveModules: showActiveModules,
        activate: activate,
    };

    return vm;

    function activate(context) {
        logger.log('All Modules View Activated', null, 'allModules', true);
        if (!isInitialized) {
            activeSaIdParameter = context.activeSaId;
            isInitialized = true;
            fetchModulesData(context.activeSaId);
            return fetchHeaderData(context.activeSaId);
        } else {
            if (context.activeSaId != activeSaIdParameter) {
                activeSaIdParameter = context.activeSaId;
                fetchModulesData(context.activeSaId);
                return fetchHeaderData(context.activeSaId);
            }
        }
    }


    function fetchModulesData(activeSaId) {
        vm.dataLoading(true);
        vm.hasErrors(false);
        return dataService.getAllModulesInCourse(activeSaId)
            .then(fetchModulesCompleted)
            .fail(fetchDataFailed);

        function fetchModulesCompleted(data) {
            allModulesObservableCollection(data);
            debugger;
            vm.dataLoading(false);
        }
    }

    function showActiveModules() {
        var url = '#/activeModules/' + activeSaIdParameter;
        router.navigateTo(url);
    }   
});

第一次数据正确显示并且一切正常。但是在转到另一个页面然后尝试回到这个页面之后,它就像浏览器完全忽略了javascript代码。

ShowActiveModules()负责将用户带到它的sibbling页面。

调试时我注意到,在回到此页面之后,浏览器甚至不再运行此代码。我必须完全刷新页面以获取数据并显示它。

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:1)

它不会再次运行此文件,因为RequireJS只读取文件一次。

乍一看,你的“激活”功能应该再次被调用。您是否尝试在只是“激活”功能上设置断点?