2012-06-12 13 views
26

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

18

È 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.

3

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.

48

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.

+5

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

+0

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

+0

Vedere http://stackoverflow.com/a/11318720/1154642 per un altro esempio di utilizzo di un osservabile in un'espressione. – bryanbraun

Problemi correlati