Knockout, ko.computed et appel ajax
Les computed sont des propriétés calculées et recalculables en fonction d’autres propriétés de notre viewmodel Knockout.
Le problème, les requêtes ajax étant asynchrones, elles empêchent l’affectation de la nouvelle valeur lors du recalcul de la computed.
var self = this; var maData = ko.computed(function() { var id = self.id(); var resouceName = self.resourceName(); $.get("/maResource/" + resouceName + "/" + id, function(data) { // Notre valeur n'est pas retournée par la computed return data; }); });
Une des solutions est donc de créer une observable, jouant le rôle de la computed, et de créer une computed, dont le seul rôle est de réaliser l’appel ajax et de modifier la valeur de l’observable.
Solution :
var self = this; var maData = ko.observable(); ko.computed(function() { var id = self.id(); var resouceName = self.resourceName(); $.get("/maResource/" + resouceName + "/" + id, function(data) { self.maData(data); }); });
Et hop!
Commentaires