我有一个应用程序,我正在使用Durandal和Knockout构建,并且在我的SPA中使用durandal导航到其中一个页面时似乎存在问题。当我从主屏幕加载应用程序并导航到具有一系列级联下拉菜单的第二页时,它看起来好像绑定断开。如果我刷新页面并加载第二页开始使用绑定,则所有这一切似乎都按预期工作。第一页除了标题外没有任何内容,第二页有级联下拉菜单。老实说,我不确定在这个问题上包含什么代码,所以如果有人想看看,请随时提问。我使用“Knockout Context”Chrome浏览器插件查看Knockout上下文,除了结果未显示外,一切似乎都正常。Durandal干扰敲除绑定?
即是具有simplier视图模型问题
define(['services/logger',
"services/datacontext"],
function (logger, datacontext) {
var manufacturers = ko.observableArray();
var manufacturer = ko.observable();
var isSaving = ko.observable(false);
var modelsWithSizes = ko.observableArray();
manufacturer.subscribe(function (newValue) {
datacontext.getBikeModelsWithSizes(modelsWithSizes, newValue.manufacturerID());
});
var hasChanges = ko.computed(function() {
return datacontext.hasChanges();
});
var cancel = function() {
datacontext.cancelChanges();
};
var canSave = ko.computed(function() {
return hasChanges() && !isSaving();
});
var save = function() {
isSaving(true);
return datacontext.saveChanges().fin(complete);
function complete() {
isSaving(false);
}
};
var canDeactivate = function() {
if (hasChanges()) {
var title = 'Do you want to leave ?';
var msg = 'Navigate away and cancel your changes?';
var checkAnswer = function (selectedOption) {
if (selectedOption === 'Yes') {
cancel();
}
return selectedOption;
};
return app.showMessage(title, msg, ['Yes', 'No'])
.then(checkAnswer);
}
return true;
};
var vm = {
activate: activate,
cancel: cancel,
canDeactivate: canDeactivate,
canSave: canSave,
hasChanges: hasChanges,
manu: manufacturer,
manufacturers: manufacturers,
modelsWithSizes: modelsWithSizes,
save: save
};
return vm;
//#region Internal Methods
function activate() {
manufacturers(datacontext.lookups.manufacturers),
logger.log('Frames View Activated', null, 'frames', false);
return true;
}
//#endregion
});
DataContext的通话如下
datacontext.lookups = {
manufacturers: function()
{ return getLocal('Manufacturers', 'name', true); }
};
你需要包括像“页”的ViewModels模块的一些代码,什么叫你激活功能 – 7zark7 2013-05-07 01:12:03
我已经添加了更简单的有问题的ViewModels的。当你提到调用activate函数的东西时,你是否正在用router.map调用谈论shell.js? – PlTaylor 2013-05-07 01:20:08
我很好奇,如果“datacontext.lookups.manufacturers”是一个Ajax或异步调用?如果是这样的话,那就是绊倒了我,因为你预计会从激活的呼叫中返回一个承诺。 – 7zark7 2013-05-07 05:30:02