2012-04-26 17 views
7

Ho il seguente problema:predefinire il valore selezionato nell'elenco a discesa

ho un array di oggetti osservabile nel formato { isSelected: false, Message: "Test1" }, { isSelected: true, Message: "Test2"}. Sto generando una lista di selezione nella vista da questo array osservabile. Voglio che il valore con la proprietà isSelected = true sia preselezionato (che sarà: Messaggio: "Test2" in questo esempio). Ecco il mio codice:

Knockout:

function ViewModel() 
{ 

    this.DummyOptions = ko.observableArray([{ isSelected: false, Message: "Test1" }, { isSelected: true, Message: "Test2"}]); 
    this.selectedValue = ko.observable(); 
} 

ko.applyBindings(new ViewModel()); 

Html:

<div> 
Dummy 
<select id="dummy" data-bind="options: DummyOptions, optionsText: 'Message'"></select> 
</div> 

Fiddle: http://jsfiddle.net/PsyComa/RfWVP/52/

Credo che questo sarà semplice, ma io sono molto nuovo per knockout ed ero non è in grado di farlo funzionare come previsto. Qualsiasi aiuto con codice funzionante sarà molto apprezzato. Grazie.

risposta

10

Hai ragione, questo è davvero molto semplice con knockout.js.

un'osservabile può essere associato a l'opzione selezionata utilizzando il "valore" vincolante:

<select data-bind="options: DummyOptions, 
        optionsText: 'Message', 
        value: selectedValue"></select> 

Ora, basta usare l'oggetto con "isSelected == true" come valore iniziale di questo osservabile:

function ViewModel() { 
    this.DummyOptions = ko.observableArray([...]); 

    // Filter the array to find the first element with isSelected == true 
    var selectedOption = ko.utils.arrayFirst(this.DummyOptions(), function(item) { 
     return item.isSelected; 
    }); 

    // Use this option as the initial value 
    this.selectedValue = ko.observable(selectedOption); 
} 

http://jsfiddle.net/RfWVP/54/

+0

grazie. Proprio quello di cui avevo bisogno. – Mdb

Problemi correlati