Sono un principiante in Knockout e devo dire che spesso mi confondo su quando usare ()
. C'è qualche consiglio/trucco generale su quando useresti ()
contro quando non lo faresti perché al momento sto facendo solo tentativi ed errori. Se il binding genera un errore o non aggiorna i valori rimuovo ()
altro che ho inserito.Quando dovrei usare parentesi in knockout
risposta
È possibile utilizzare ()
quando si utilizzano osservabili o quando si esegue qualsiasi altro metodo. Le osservabili di ritaglio sono funzioni invocate per restituirti ciò che stai cercando o consentire di assegnare nuovi valori.
Nel knockout si utilizza object.property()
per recuperare un valore e object.property(newValue)
per assegnare un valore a tale proprietà.
Sul ko website cassa della documentazione, in particolare la sezione relativa observables, che mostra l'utilizzo del ()
quando l'interrogazione e la scrittura osservabili.
Per citare:
var myViewModel = {
personName: ko.observable('Bob'),
personAge: ko.observable(123)
};
Per leggere il valore corrente del osservabile, basta chiamare il osservabile senza parametri. In questo esempio, myViewModel.personName() si ritorno 'Bob', e myViewModel.personAge() restituirà 123.
Per scrivere un nuovo valore al osservabile, chiamare il osservabile e passare il nuovo valore come parametro. Ad esempio, chiamando myViewModel.personName ('Mary') cambierà il valore del nome in 'Mary'.
Per scrivere valori su più proprietà osservabili su un oggetto modello, è possibile utilizzare la sintassi del concatenamento. Ad esempio, myViewModel.personName ('Maria'). Personaggio (50) cambierà il valore del nome a 'Mary' e il valore di età per 50.
di Knockout interactive tutorial è anche abbastanza bello e vale la pena passare.
Fondamentalmente ogni volta che si lavora con un valore osservabile (matrice o altro), è necessario utilizzare le parentesi per ottenere il valore e impostare il valore.
var something = ko.obserbable();
something(5); //set value
console.log(something()); //get value: 5
Il motivo è che la maggior parte delle implementazioni JS non supportano getter e setter per le proprietà ancora, quindi osservabili sono state implementate in questo modo per aggirare questa limitazione.
Mi sento come se le risposte esistenti ignorassero un punto molto importante di confusione: gli attributi data-bind
.
È vero che si utilizzano i parens quando si è in Javascript e si ottengono o si impostano gli osservabili. Ma quando si scrive data-bind="text: property"
, si omette il paren anche quando si lavora con osservabili.
Modifica
Come osservato nel commento qui sotto, attacchi che sono espressioni o proprietà di accesso di observbles, richiedono parens
visible: personName().length > 0
visible: person().Name().length > 0
visible: person().isVisible
Si noti che l'ultimo person
e isVisisble
sono entrambi osservabili, ma la l'ultima proprietà non usa i parens! Il motivo è che passeremmo un valore al binding invece che a un osservabile, e non verrebbe aggiornato.
- 1. Quando dovrei usare le parentesi nelle istruzioni require/include?
- 2. C# Quando dovrei usare List e quando dovrei usare l'arraylist?
- 3. Quando dovrei usare # in ColdFusion?
- 4. Quando dovrei usare ConcurrentSkipListMap?
- 5. Quando dovrei usare CompiledQuery?
- 6. Quando dovrei usare AQL?
- 7. Quando dovrei usare un parser?
- 8. Quando dovrei usare l'inizializzazione uniforme?
- 9. Quando dovrei usare git stash?
- 10. Quando dovrei usare l'Interface Builder?
- 11. Quando dovrei usare metodi statici?
- 12. Quando dovrei usare Option.empty [A] e quando dovrei usare None in Scala?
- 13. Quando dovrei usare setUserState in Joomla?
- 14. Quando dovrei usare deftype in Clojure?
- 15. Quando dovrei usare package-private in Java?
- 16. Quando/Perché dovrei usare Multithread in Java?
- 17. Quando dovrei usare l'attributo in C#?
- 18. Quando dovrei usare \ A in un'espressione regolare?
- 19. Quando dovrei usare simultaneamente in golang?
- 20. Quando dovrei usare un delegato in asp.net?
- 21. Quando dovrei usare "prototype" in JavaScript
- 22. Quando dovrei usare setUpClass e quando __init__?
- 23. Quando dovrei usare require() e quando usare define()?
- 24. Knockout nidificato di oggetti e parentesi
- 25. Quando dovrei usare Sql Azure e quando dovrei usare la tabella Storage?
- 26. Quando dovrei usare Import-Package e quando dovrei usare Require-Bundle?
- 27. Quando dovrei usare O_CLOEXEC quando apro il file in Linux?
- 28. Quando dovrei usare `export default`in JavaScript/TypeScript?
- 29. Quando non dovrei usare le espressioni regolari?
- 30. django - quando dovrei usare media_root o static_root?
Buon punto, l'unica eccezione è se viene utilizzata un'espressione JavaScript all'interno dell'attributo data-bind, nel qual caso le parentesi ** sono ** richieste, ad es. 'visible: personName(). length> 0' – benrwb
Le parentesi sono anche obbligatorie quando si usano i binding virtuali basati sui commenti, come in:' '. Non capisco perché sia così, ma dal 2.3.2 è vero. – x0n
Vedere http://stackoverflow.com/a/11318720/1154642 per un altro esempio di utilizzo di un osservabile in un'espressione. – bryanbraun