Ho cercato di creare un bindingHandler personalizzato che possa essere utilizzato per conferire un comportamento filigrana ai campi di input del testo.filigrana di input testo utilizzando bindingHandler personalizzato
Con watermark
intendo: per aggiungere i valori predefiniti ai campi di testo che vengono rimossi a fuoco, e sostituito sulla sfocatura se il campo di testo è ancora vuoto
sono riuscito a farlo funzionare come dimostrato in questo jsfiddle : http://jsfiddle.net/rpallas/nvxuw/
ho 3 domande su questa soluzione:
- esiste un modo per modificarlo in modo che ho solo dichiarare il valore filigrana volta? Attualmente devo metterlo sul posto dove dichiaro il binding e devo anche inizializzare l'osservabile con lo stesso valore nel viewModel - altrimenti non avrebbe alcun valore iniziale.
- C'è un modo migliore per arrivare al sottostante osservabile al quale il valore degli elementi è associato. Attualmente lo sto utilizzando utilizzando allBindingsAccessor, ma questo mi sembra sbagliato. Inizialmente stavo semplicemente impostando il valore usando jquery
$(element).val('')
ma anche questo mi sembrava sbagliato. Qual è il migliore, o c'è un modo migliore? - Qualcuno ha o conosce una soluzione esistente a questo problema? Sto reinventando la ruota?
sì, questo è quasi esattamente quello che avevo prima ho cambiato per utilizzare il allBindingsAccessor. Mi mancava il 'setTimeout' quando si tenta di impostare il valore iniziale. Potresti spiegare brevemente perché è necessario? Inoltre, sai se c'è un modo migliore? o pensi che questo sia un buon (abbastanza) modo (in termini di tutta la soluzione)? Per esempio noto che c'è un vincolo di hasfocus (incorporato). Potrebbe essere un approccio migliore? – Robbie
Penso che questo approccio sia adatto se si vogliono supportare i browser più vecchi. Per i nuovi basta usare l'attributo segnaposto. Il setTimeout è necessario perché internamente KO utilizza un setTimeout prima di impostare il valore dell'input. Ciò significa che il tuo codice era in esecuzione prima che il codice KO impostasse il valore, quindi è necessario impostare setTimeout per assicurarti che il tuo codice arrivi per ultimo nell'esecuzione. – madcapnmckay
Grazie mille per la spiegazione e l'aiuto. – Robbie