KnockoutJS - Opzioni vincolanti
Questa associazione viene utilizzata per definire le opzioni per un elemento di selezione. Può essere utilizzato per un elenco a discesa o un elenco a selezione multipla. Questa associazione non può essere utilizzata con qualcosa di diverso dagli elementi <select>.
Syntax
options: <binding-array>
Parameters
Il parametro da passare qui è un array. Per ogni voce nell'array, verrà aggiunta l'opzione per il rispettivo nodo di selezione. L'opzione precedente verrà rimossa.
Se il parametro è un valore osservabile, le opzioni disponibili dell'elemento verranno aggiornate man mano che l'osservabile sottostante viene modificato. L'elemento viene elaborato una sola volta, se non viene utilizzato alcun osservabile.
Parametri aggiuntivi
optionsCaption - Questo è solo un valore fittizio predefinito, che si legge come "Seleziona elemento dal basso" o "Scegli dal basso".
optionsText- Questo parametro consente di specificare quale proprietà dell'oggetto si desidera impostare come testo nell'elenco a discesa. Questo parametro può anche includere una funzione, che restituisce la proprietà da utilizzare.
optionsValue- Simile a optionsText. Questo parametro consente di specificare quale proprietà dell'oggetto può essere utilizzata per impostare l'attributo value degli elementi opzione.
optionsIncludeDestroyed - Specificare questo parametro se si desidera vedere gli elementi dell'array che sono contrassegnati come distrutti e non sono effettivamente eliminati dall'array osservabile.
optionsAfterRender - Usalo per eseguire una logica personalizzata sugli elementi delle opzioni esistenti.
selectedOptions - Viene utilizzato per leggere e scrivere le opzioni selezionate da un elenco di selezione multipla.
valueAllowUnset- Utilizzando questo parametro, è possibile impostare la proprietà del modello con il valore che effettivamente non esiste nell'elemento select. In questo modo è possibile mantenere l'opzione predefinita vuota quando l'utente visualizza il menu a discesa per la prima volta.
Example
Diamo un'occhiata al seguente esempio che dimostra l'uso dell'associazione di opzioni.
<!DOCTYPE html>
<head>
<title>KnockoutJS Options Binding</title>
<script src = "https://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js"
type = "text/javascript"></script>
</head>
<body>
<p>Tutorials Library:
<select data-bind = "
options: availableTutorials,
value: selectedTutorial,
optionsCaption: 'Choose tutuorial...',
"></select></p>
<p>You have selected <b><span
data-bind = "text:selectedTutorial"></span></b></p>
<script type = "text/javascript">
function ViewModel() {
this.selectedTutorial = ko.observable();
this.availableTutorials = ko.observableArray ([
'Academic','Big Data',
'Databases','Java Technologies',
'Mainframe','Management',
'Microsoft Technologies','Mobile Development',
'Programming','Software Quality'
]);
};
var vm = new ViewModel();
ko.applyBindings(vm);
</script>
</body>
</html>
Output
Eseguiamo i seguenti passaggi per vedere come funziona il codice sopra:
Salva il codice sopra in formato options-bind.htm file.
Apri questo file HTML in un browser.
Notare che l'associazione del valore viene utilizzata per leggere l'elemento selezionato corrente dal menu a discesa.
Osservazioni
La selezione viene mantenuta durante l'impostazione / la modifica delle opzioni
KO lascerà la selezione dell'utente invariata ove possibile, mentre l'associazione delle opzioni aggiorna il set di opzioni in <select>elemento. Per una singola selezione nell'elenco a discesa, il valore selezionato in precedenza verrà comunque mantenuto. Per l'elenco a selezione multipla, tutte le opzioni selezionate in precedenza verranno conservate.
Post-elaborazione delle opzioni generate
Le opzioni generate possono essere post-elaborate per ulteriori logiche personalizzate con l'aiuto di optionsAfterRenderrichiama. Questa funzione viene eseguita dopo che ogni elemento è stato inserito nella lista, con i seguenti parametri:
L'elemento opzione che viene inserito.
L'elemento dati a cui è associato; questo non sarà definito per l'elemento didascalia.
Example
Diamo un'occhiata al seguente esempio che utilizza optionsAfterRender per aggiungere un'associazione di disabilitazione a ciascuna opzione.
<!DOCTYPE html>
<head>
<title>KnockoutJS Options Binding - using optionsAfterRender </title>
<script src = "https://ajax.aspnetcdn.com/ajax/knockout/knockout-3.3.0.js"
type = "text/javascript"></script>
</head>
<body>
<select size = 3 data-bind = "
options: myItems,
optionsText: 'name',
optionsValue: 'id',
optionsAfterRender: setOptionDisable">
</select>
<script type = "text/javascript">
function ViewModel() {
myItems = [
{ name: 'First Class', id: 1, disable: ko.observable(false)},
{ name: 'Executive Class', id: 2, disable: ko.observable(true)},
{ name: 'Second Class', id: 3, disable: ko.observable(false)}
];
setOptionDisable = function(option, item) {
ko.applyBindingsToNode(option, {disable: item.disable}, item);
}
};
var vm = new ViewModel();
ko.applyBindings(vm);
</script>
</body>
</html>
Output
Eseguiamo i seguenti passaggi per vedere come funziona il codice sopra:
Salva il codice sopra in formato options-bind-optionsafterrender.htm file.
Apri questo file HTML in un browser.
L'opzione con ID 2 viene disabilitata utilizzando la richiamata optionsAfterRender.