knock-out lier une clé d'objet de valeur à la liste déroulante
J'ai les modèles suivants:
var allCategories = [{
id: 1,
name: 'Red'},
{
id: 5,
name: 'Blue'}];
function model() {
self = this;
self.name = ko.observable("");
self.categoryId = ko.observable(-1);
self.categoryName = ko.computed(function() {
if (self.categoryId() == -1) return "";
return getCategoryNameById(self.categoryId()).name;
});
}
function getCategoryNameById(id) {
return _.find(allCategories, function(cat) {
return cat.id == id;
});
}
Je tiens à offrir un menu déroulant permettant de sélectionner la catégorie, mais je n'ai aucune idée de comment lier.
Peut-être que j'ai utilisé la bonne approche avec mes modèles, mais c'est probablement la façon dont je accéder à mes données depuis le serveur, j'ai donc essayé d'envelopper mon JS autour de cela.
J'ai essayé quelque chose comme ceci:
<select data-bind="options: categories, optionsText: 'name', value: 'id', optionsCaption: 'Categorie...'"></select>
Mais je ne comprends pas comment connecter la liste déroulante de la valeur pour le modèle categoryId
.
Ici est un violon avec un travail de liaison pour le nom de la propriété.
OriginalL'auteur kannix | 2012-11-27
Vous devez vous connecter pour publier un commentaire.
Pour votre boîte de liste, vous devez spécifier:
options
,optionsText
,optionsValue
, etvalue
.value
(qui est la valeur actuellement sélectionnée) doit pointer vers votremodel.categoryId()
. EtoptionsValue
est le nom de la propriété où obtenir des valeurs de la liste:Et c'est tout. Et le travail de violon: http://jsfiddle.net/Y7Nrc/
OriginalL'auteur Max Shmelev
Selon Max Schmelevs réponse, ce qui est correct, cette fonctionnalité n'est pas ne change pas l'objet JSON lorsque vous modifiez l'élément à partir d'une liste déroulante.
Voici donc mes corrections pour sa code:
Code HTML:
Code Javascript:
!!!IMPORTANT!!!
Si cette approche répond à votre question, veuillez sélectionner Max Schmelev réponse comme correcte, pas le mien, parce que je viens de mettre quelques remarques dans son code.
merci beaucoup pour cette réponse. J'ai changer
self.categoryId = ko.observable(1);
àself.categoryId = ko.observable();
et maintenant tout fonctionne comme un charme 🙂OriginalL'auteur Pavlo