0
我在我的文件夾視圖模型如下:如何處理durandal激活方法中的異步ajax調用?
var observableData = ko.observable();
function activate(routeData) {
var buildObservableData = function (data) {
observableData(ko.mapping.fromJS(data, mapping));
// do stuff here that I need server data for
}
return dataservice.getFolder(currentFolderId, buildObservableData);
}
用的GetFolder爲:現在
var getFolder = function (id, buildData) {
var request = $.ajax({
async: true,
url: endpoint,
type: 'GET',
dataType: 'json',
xhrFields: {
withCredentials: true
},
})
.done(function (data) {
buildData(data);
})
.fail(function (msg) {
toastr.error("Error: Could not load folder data.");
});
}
,在我的文件夾視圖,我有這樣的:
<!-- ko foreach: data().folders -->
<!-- /ko -->
所以,當我從一個文件夾導航到另一個,我得到這個:
"Unable to parse bindings.↵Message: TypeError: Cannot read property 'folders' of undefined;↵Bindings value: foreach: data().folders "
我在做什麼錯?
更新:
如果我改變AJAX調用此:
return $.ajax({
從這個:
var request = $.ajax({
那麼我就可以瀏覽在我的意見......但我我不確定這是否正確。如果它幫助別人或者萬一不合適,我會留下來。
您發現的解決方案是書中http://durandaljs.com/documentation/View-Model/解決方案中的一個,因此它是正確的。 >您可以選擇返回承諾,以在異步激活邏輯完成時通知激活器。 順便說一句:您可以回答自己的問題,並將其標記爲解決方案。並不是說你會得到任何聲望,但它有助於解決問題。 – RainerAtSpirit
@RainerAtSpirit謝謝! – SB2055
姍姍來遲,但是你不想要返回AJAX諾言,然後在激活中有一個完成的方法來添加數據?在我看來,你已經把所有的東西都倒退了。這最終會爲你工作嗎? – rball