Estoy usando knockoutjs para enlazar una lista de selección. Aquí está una La muestra
Quiero seleccionado la opción de texto en lugar de un valor seleccionado.

Cómo conseguirlo mediante knockoutjs ?

<select id="projectMenu" name="projectMenu" data-bind="   
        value: selectedProject,
        options:        projectFilters,
        optionsText:    'a', 
        optionsValue:   'b',   
        optionsCaption: '-- Select Project --'
    ">
    </select>
<b>Selected Project:</b> <span data-bind="text: selectedProject"></span>
por favor, proporcione un ejemplo de código, y no simplemente un enlace.
Posibles duplicados? stackoverflow.com/questions/11112435/…
si duplicados entonces, ¿qué?? esa pregunta que nunca ha sido contestada, ¿significa que ningún cuerpo puede pedir?

OriginalEl autor Sudarshan | 2013-10-24

3 Comentarios

  1. 10

    La forma más sencilla de hacerlo es quitar el optionsValue de unión.
    Cuando no sepcify la optionsValue de unión, el elemento completo será el valor seleccionado.

    <select id="projectMenu" name="projectMenu" data-bind="   
            value: selectedProject,
            options:        projectFilters,
            optionsText:    'a',         
            optionsCaption: '-- Select Project --'
        ">
        </select>
    <b>Selected Project:
    <span data-bind="text: selectedProject() ? selectedProject().a : 'no selection '"></span>

    Ver violín

    el violín enlace no funciona
    Para mí funciona. Qué tipo de error qué se obtiene ?
    Se está trabajando para suscribir el evento no para el evento de cambio.de todos modos buena solución mate. agradezco su work.by la forma de violín está trabajando muy bien para mí.

    OriginalEl autor Damien

  2. 1

    Como ahora estoy preocupado de que esto no es posible con un simple enlace. Pero Usted puede crear fácilmente computedObservable que elegir optionText basado en optionValue

    vm.selectedOption= ko.computed(function () { 
       for (var i = 0; i < this.projectFilters().length; i += 1) {
           var data = this.projectFilters()[i];
           if (data.a === this.selectedProject()) {
               return data.b;
           }
       }
       return null;
    }, vm);
    Yo no puedo hacer eso porque no quiero repetir una gran colección, y tengo muchos seleccione de la lista, en mi opinión. por lo que se reduce el rendimiento.
    A menos que no son muy grandes colecciones que debería funcionar OK – PCs modernos son bastante rápidas ;). Y yo aconsejo hacer pruebas de rendimiento antes de rechazar esta solución, tal vez un poco más lento que el rendimiento sea aceptable. Si no, Usted probablemente debería escribir personalizado knockout de unión para lograr requisito.
    ok, pero esta será mi última opción.

    OriginalEl autor Krzysztof Cieslak

  3. 1
    vm.selectedCountryName = ko.computed(function () {
            var text = '';
            ko.utils.arrayForEach(vm.countries(), function (item) {
                if (item.CountryId == vm.selectedCountry()) {
                    text = item.CountryName;
                    return;
                }
            });
            return text;
        });

    OriginalEl autor user3155930

Dejar respuesta

Please enter your comment!
Please enter your name here