ビューモデルのバインドに MVC 4Application でノックアウトを使用しています。ビュー モデル全体をリロードせずに、Ajax 成功関数のビュー モデル フィールドを更新する必要があります。次のコードを使用して、ビュー モデル フィールドを更新しています。しかし、問題は、各ビューモデルフィールド値の更新時に、ビューモデル全体がリロードされ、updateHiddenElements メソッドを呼び出すという循環要求になることです。
ここに私のビューモデルがあります
function ViewModel(data) {
var self = this;
self.Fields = ko.observableArray(ko.utils.arrayMap(data, function(item) {
return new FormField(item);
}));
self.HiddenElements = ko.observableArray([]);
self.dirtyFlag = new ko.dirtyFlag(self, false);
self.applyUpdates = ko.computed(function () {
if (self.dirtyFlag.isDirty()) {
//alert("YES !!!");
updateHiddenElements(self);
setTimeout(function() {
self.dirtyFlag.reset();
}, 0);
}
});
};
これが私の更新方法です。
var updateHiddenElements = function (viewModel) {
//alert("Posting Data:\n\n"+ko.toJSON(viewModel));
//console.log("#### SENDING AJAX REQUEST TO FETCH LIST OF ELEMENTS TO BLANKOUT ####\n");
$.ajax({
type: "POST",
url: '@Url.Action("GetBlankoutElements", "Offer")' + "?OfferID=" + @Model.ID,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: ko.toJSON(viewModel),
success: function(result) {
result.split(',').forEach(function(name) {
var param = ko.utils.arrayFirst(viewModel.Fields(), function(currentParam)
{
return currentParam.Name() == name;
});
if (param) {
param.Value(param.Default());
}
});
viewModel.HiddenElements(result.split(','));
}
});
};
この問題を解決する方法を教えてもらえますか?