web-dev-qa-db-fra.com

Options de sélection KnockoutJS et valeur sélectionnée

Question similaire: Sélectionnez la valeur initiale de l'élément

Je rencontre un problème pour définir la valeur initiale de l'élément select. J'ai essentiellement une liste de données de départ provenant du serveur pour remplir la liste déroulante, et je veux que la valeur sélectionnée représente ce qui doit être sélectionné dans l'entité.

Étant donné que la valeur sélectionnée du modèle de données n'est pas égale à la référence d'objet dans les données de départ, rien n'est sélectionné.

En ce moment, je passe en revue chaque entité, je trouve la valeur sélectionnée correcte, la définissant égale à l'équivalent des données de départ, puis Knockout sait comment la câbler.

Existe-t-il une solution plus élégante que cela? J'ai tripoté un exemple simplifié avec plus de détails ... http://jsfiddle.net/hbrYM/14/

19
aswallows

Comme vous l'avez bien deviné, la référence selectedValue ne correspond pas, donc KO ne sélectionne pas cet élément. Pour que cela fonctionne, ne pas enregistrer l'objet complexe dans la valeur sélectionnée et sélectionner l'ID à la place, car une égalité de type primitive peut réussir et la valeur correcte est sélectionnée.

http://jsfiddle.net/VLTFB/3/

Vous devrez utiliser l'option optionsValue sur la liaison d'options (si cela a du sens :)

<select data-bind="options: seedData,
                    optionsText: 'firstName',
                    optionsValue: 'ID',
                    value: data.selectedValue">

[~ # ~] modifier [~ # ~]

Comme discuté, vous pouvez resélectionner l'élément correct avec un calculé (non testé).

vm.currentlySelected = ko.computed(function () { 
   for (var i = 0; i < this.seedData().length; i += 1) {
       var data = this.seedData()[i];
       if (data.ID === this.selectedValue()) {
           return data;
       }
   }
   return null;
}, vm);

J'espère que cela t'aides.

35
madcapnmckay