Je suis nouveau sur KO et j'ai de la difficulté à obtenir une valeur calculée pour fonctionner. J'ai un viewmodel composé de nombreux objets parce que j'ai beaucoup de tables différentes dans la base de données dont je récupère des données. Ceci est un exemple de la façon dont j'ai mis la VM en place. Ne hésitez pas à critiquer tout ce que je fais mal ici (même si cela ne fonctionne en dehors de la valeur calculée):Knockoutjs - Champs locaux de référence dans le calcul observé
var viewModel = function(object1, object2...) {
var self = this;
var activeProductCodes = ['AB-1', 'AB-2', 'AB-3'];
self.myFirstObject = ko.observable({
field1: ko.observable(object1.field1),
field2: ko.observable(object1.field2),
field3: ko.observable(object1.field3)
});
self.mySecondObject = ko.observable({
productCode: ko.observable(object2.productCode),
isActiveProduct: ko.computed(function() {
return self.activeProductCodes.indexOf(productCode) !== -1 ? true : false;
}, self)
});
}
isActiveProduct ne fonctionne pas parce qu'il ne sait pas ce que productCode est. J'ai essayé de faire this.productCode, self.productCode, self.mySecondObject(). ProductCode, aucun d'entre eux ne semble fonctionner. Est-il possible d'accéder à la valeur? Est-ce que quelque chose ne va pas dans ma configuration globale de machine virtuelle qui cause l'échec?
Merci
Steve
MISE À JOUR: Je suis maintenant ne pas faire les objets observables et déclarant ma machine virtuelle comme si:
var viewModel = function(object1, object2...) {
var self = this;
var activeProductCodes = ['AB-1', 'AB-2', 'AB-3'];
self.myFirstObject = {
field1: ko.observable(object1.field1),
field2: ko.observable(object1.field2),
field3: ko.observable(object1.field3)
}
self.mySecondObject = {
productCode: ko.observable(object2.productCode),
isActiveProduct: ko.computed(function() {
return self.activeProductCodes.indexOf(productCode) !== -1 ? true : false;
}, self)
}
}
Pourquoi 'mySecondObject' existe-t-il? Pourquoi ne pas avoir à la fois 'productCode' et' isActiveProduct' sur 'viewModel'? Une autre question - attendez-vous 'm6yFirstObject' et' mySecondObject' à changer du tout? Sinon, ils devraient être – Jamiec
POJO Parce que le produit appartient au deuxième objet. Il y a beaucoup d'objets dans le modèle de vue que je dois afficher sur la page, j'ai un ticket d'assistance, le produit avec lequel ils ont le problème, les détails de toute visite d'ingénieur, etc qui sont stockés dans des tables séparées dans la base de données. avoir à interroger séparément. En réalité, il y a plus près de 10 objets. J'ai trouvé quand je mettais la VM en place que si je ne rendais pas les objets eux-mêmes observables que la page n'a pas reçu de mises à jour – ministe2003
Sauf si vous changez l'objet * entier * pour un autre objet, il n'a pas besoin d'être observable. Si vous changez seulement les * champs * de l'objet, rendez simplement ces champs observables. Lorsque vous chargez une mise à jour à partir du serveur, mettez à jour les champs eux-mêmes et non l'objet entier – Jamiec