Comment obtenir de l'option de menu sélectionnée à partir d'un knockout.js observableArray?

J'ai l'impression que je suis absent quelque chose de très basique, mais je ne peux pas obtenir un menu déroulant pour le travail que j'attends de l'aide de Knockout.js.

J'ai un ensemble d'objets que je veux présenter dans un menu, et j'ai besoin de trouver l'option sélectionnée et post que pour le serveur. Je peux obtenir le menu à rendre, mais ne semble pas possible d'obtenir la valeur de l'élément sélectionné. Mon point de vue, le modèle ressemble à ceci:

function ProjectFilterItem( name, id ) {
    this.Name = name;
    this.Id   = id;
}

function FilterViewModel() {
    this.projectFilters = ko.observableArray([
        new ProjectFilterItem( "foo", "1" ),
        new ProjectFilterItem( "bar", "2" ),
        new ProjectFilterItem( "baz", "3" )
    ]);
    this.selectedProject = ko.observable();
}

ko.applyBindings( new FilterViewModel() );

et de mon point de vue balisage ressemble à ceci:

<select 
    id        = "projectMenu"   
    name      = "projectMenu"
    data-bind = "
        options:        projectFilters,
        optionsText:    'Name', /* I have to enquote the value or I get a JS error */
        optionsValue:   'Id',   /* If I put 'selectedProject here, nothing is echoed in the span below */
        optionsCaption: '-- Select Project --'
    "
></select>

<b>Selected Project:</b> <span data-bind="text: selectedProject"></span>

Comment obtenir l'élément de menu sélectionné pour l'affichage dans la durée, et à poster sur le serveur? (Je suppose que les observables de rendre dans la durée est la même que j'ai poster.) Ai-je besoin d'une autre propriété dans le ProjectFilterItem, comme this.selected = ko.observable(false); ? Si oui, comment pourrais-je le déclarer en tant que cible de la valeur?

OriginalL'auteur Val | 2012-11-05