我在我的 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(','));
}
});
};
有人可以建议我如何解决这个问题吗?