J'utilise knockout dans mon application MVC 4Application pour voir la liaison de modèle. J'ai besoin de mettre à jour mes champs de modèle de vue sur la fonction de succès Ajax sans recharger le modèle de vue entière. J'utilise le code suivant pour mettre à jour les champs de modèle de vue. Mais le problème est que lors de la mise à jour de chaque valeur de modèle de vue, le mode viewmodel entier est rechargé, ce qui aboutit à une requête circulaire d'appel de la méthode updateHiddenElements.mise à jour knockout observable sur la fonction de succès ajax sans recharger
Voici mon modèle Voir
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);
}
});
};
Voici ma méthode de mise à jour,
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(','));
}
});
};
Quelqu'un peut-il me suggère comment résoudre ce problème?