我有一個應用程序,我正在使用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