Loupe

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!

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus