2012-01-18 13 views
8

Ho due domande si prega di:Assegnazione di valori alle knockout osservabile determinato dinamicamente in base al nome della stringa

sto usando eliminazione diretta (io sono un noob SRY KO) e vorrei assegnare un valore a una specifica knockout osservabile su un evento click ma che dovrebbe essere determinato solo sull'evento click stesso (e il valore che passerò al data-bind = click) ... può essere fatto per favore ... posso ottenere la variabile osservabile a eliminazione diretta appena sopra il suo nome (un valore stringa) invece di dover sapere quale osservabile assegnerò un valore in anticipo?

E, in secondo luogo meno importante, se esiste una tale funzione ko.ObservableByName (stringName) esiste è possibile utilizzarlo in qualche modo e assegnare la preselezione di più elementi selezionati al caricamento della pagina..e come si prega?

Ho provato a fare questo ... Ho usato data-bind = "Click: loadData.bind ($ data, 'param1', 'param2')" e poi ho 'm in grado di ottenere quei param1 e param2 valori di stringa con la costruzione di un gestore di eventi nella mia eliminazione diretta ViewModel che va qualcosa lungo la linea del:

self.loadData = function (src, dest) { 
    //dest is 'param1', src is 'param2', both are stings 
    if (src == 'param1') 
     self.p1observable($('#' + dest).val()); 
    else 
     self.p2observable($('#' + dest).val()); 
} 

il mio problema più grande con questo è che ho a costruire la funzione con osservabili p1/p2 già specificati e hard-coded in esso, ma in realtà mi piacerebbe ottenere param1 e param2 da utilizzare come nomi o riferimenti per nome di alcuni dei miei osservabili, che potrei quindi passare a piacere (accanto a un valore da assegnare, o meglio ancora un altro osservabile vorrei copiare il valore dal primo), e quindi potrei assegnare i valori passati nella funzione click direttamente a un osservabile di mia scelta (e non avere un gran numero di funzioni così piccole) ...

Forse ci sto andando nel modo sbagliato? Forse non dovrei passare per niente valori di stringa ... Forse dovrei provare a passare in un oggetto osservabile, ma come si può farlo all'interno di data-bind, scrivi semplicemente myViewModel.myObservable o qualcosa del genere?

+0

Puoi pubblicare un esempio di ciò che hai ottenuto finora? – ericb

risposta

15

Se avete il vostro oggetto padre, allora si può accedere ad un osservabile utilizzando questa sintassi:

viewModel[observableName]

e impostare il valore come:

viewModel[observableName](newValue)

Ecco un esempio dove puoi scegliere il nome della proprietà da un menu a discesa e quindi impostare il valore di conseguenza e un altro in cui il pulsante è associato direttamente all'impostazione di un valore osservabile: http://jsfiddle.net/rniemeyer/CTnUQ/

+0

era quasi esattamente quello di cui avevo bisogno, quindi grazie mille ... solo un sidenote, se all'interno di viewModel, usa questa notazione [observableName] ... ma suppongo che funzionerà se la stai usando da fuori viewModel construct, cosa non sono sicuro, se questo funzionerebbe se ad esempio avessi un numero di pagine diverse e ogni pagina caricasse uno script viewModel esterno, allora numerose pagine utilizzerebbero le stesse istanze di dati o ognuna produrrebbe la propria copia di viewModel caricata da un file .js esterno? Ci proverò presto, sono bloccato da JQMobile, e il suo bug irrisolvibile di cambio pagina su WP7_ – dada

Problemi correlati