54 votes

Knockout: observable vs fonction calculée

Lors de l'utilisation de knock-out, ce qui est l'avantage de l'utilisation en lecture seulement calculé observables plutôt que de simples fonctions?

Ci-dessous les viewmodel constructeur et un fragment de code html, par exemple:

var ViewModel = function(){
    var self = this;
    self.someProperty = ko.observable("abc");
    self.anotherProperty = ko.observable("xyz");
    self.someComputedProperty = function(){
        return self.someProperty() + self.anotherProperty();
    };    
};

<input data-bind="value: someProperty"/>
<input data-bind="value: anotherProperty"/>
<p data-bind="text: someComputedProperty()"></p>

Ici, tout semble fonctionner comme vous le souhaitez, donc, il y a une raison pourquoi je devrais plutôt utiliser:

​var ViewModel = function(){
    var self = this;
    self.someProperty = ko.observable("abc");
    self.anotherProperty = ko.observable("xyz");
    self.someComputedProperty = ko.computed(function(){
        return self.someProperty() + self.anotherProperty();
    });    
};


<input data-bind="value: someProperty"/>
<input data-bind="value: anotherProperty"/>
<p data-bind="text: someComputedProperty"></p>

Je remarque que la documentation à http://knockoutjs.com/documentation/computedObservables.html stipule que "...des liaisons déclaratives sont simplement mises en œuvre calculé observables", cela veut-il dire il y a un besoin pour moi de les utiliser de manière explicite dans mon viewmodel?

74voto

RP Niemeyer Points 81663

Si le seul but de votre calculée observable est de faire une liaison simple contre lui, puis à l'aide d'une fonction serait l'équivalent. Les liaisons sont mises en œuvre à l'intérieur d'un calculées observables pour suivre les dépendances, de sorte qu'il sera re-déclenchement de votre liaison lorsque l'un des observables du changement.

Voici quelques choses à considérer au sujet calculée observables vs une fonction

  • la valeur d'un calculées observable est mis en cache, de sorte qu'il est mis à jour seulement quand il est créé et une dépendance est mis à jour. Pour une fonction régulière, vous aurez besoin d'exécuter la logique à chaque fois. Si beaucoup de choses dépendent que de la valeur (dire que chaque élément d'une collection est exécutoire à l'encontre d'une valeur de la société mère), alors cette logique va être en train de courir, encore et encore.

  • dans votre code JavaScript, vous êtes également libre d'utiliser la observables comme vous le feriez avec d'autres observables. Cela signifie que vous pouvez créer manuel abonnements contre eux et dépendent d'autres computeds (appel d'une fonction aussi de créer cette dépendance). Vous pouvez compter sur la normale méthodes d'utilitaire KO comme ko.utils.unwrapObservable générique de déterminer si vous avez besoin d'appeler une fonction ou pas à récupérer la valeur.

  • si finalement vous souhaitez envoyer la valeur pour le serveur, un calculées observables seront naturellement apparaître dans votre sortie JSON, tandis qu'une valeur qui est le résultat d'une fonction normale va juste disparaître lors de la conversion au format JSON (vous pouvez faire plus de travail pour remplir une propriété de cette fonction première).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X