2013-05-22 4 views
16

Sono nuovo di dattiloscritto e vorrei combinarlo con la bontà di knockout. Ho un osservabile calcolato, che funziona attualmente, ma voglio sapere se questo è il modo giusto su di esso o c'è un modo migliore.Dichiarare un knockout calcolato osservabile in dattiloscritto

Sto usando il knockout definition file from nu-get. In esso ci sono 4 definizioni KnockoutComputed (x).

  1. KnockoutComputed
  2. KnockoutComputedDefine
  3. KnockoutComputedFunctions
  4. KnockoutComputedStatic

mi piace il metodo {} di dichiarare di osservabili e vorrei tenere questo. Quindi, per farla breve è questo il metodo corretto di osservabili che dichiarano o c'è un modo alternativo (magari con intlisense nella funzione)

sto usando il primo in questo modo:

class PersonViewModel { 
    public firstname: KnockoutObservable<string>; 
    public lastname: KnockoutObservable<string>; 
    public fullname: KnockoutComputed<string>; 
    constructor() { 
     this.firstname = ko.observable(''); 
     this.lastname = ko.observable(''); 
     this.fullname = ko.computed({ 
      owner: this, 
      read: function() { 
       return this.firstname() + " " + this.lastname(); 
      } 
     }); 
    } 
} 

con lo snippet HTML di :

risposta

35

Si consiglia di utilizzare le funzioni freccia per il calcolo. Essa vi darà l'Intellisence desiderata così:

this.fullname = ko.computed({ 
     owner: this, 
     read: () => { 
      return this.firstname() + " " + this.lastname(); 
     } 
    }); 

sostanza che cattura this con chiusura in modo che non importa chi richiama la funzione. this continuerà a significare PersonViewModel anziché any. Altro: http://basarat.github.io/TypeScriptDeepDive/#/this

Prova l'intellisense in TypeScript Playground. È necessario acquisire intelligenza quando si preme this.

+0

hey che è bello e anche il sito Web che hai inviato. Non c'è ancora alcun intelisenso nello stu-dio visto. Devo solo succhiarlo e trattare. – Kieran

+1

Dovresti assolutamente diventare intellisense. Prova il link del playground che ho appena aggiunto alla risposta. – basarat

+1

ah. ho solo espresso qui installato forse che ha qualcosa a che fare con esso? Proverò più tardi con un propper vs install – Kieran