您好我正在使用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页面。
调试时我注意到,在回到此页面之后,浏览器甚至不再运行此代码。我必须完全刷新页面以获取数据并显示它。
谁能告诉我我做错了什么?
答案 0 :(得分:1)
它不会再次运行此文件,因为RequireJS只读取文件一次。
乍一看,你的“激活”功能应该再次被调用。您是否尝试在只是“激活”功能上设置断点?