knockout.js - Knockout observableArray i TypeScript
Vad är det korrekta sättet att initialisera en Knockout observableArray i en TypeScript-klass?
Jag gör något liknande detta:
module ViewModel {
declare var ko;
export class IndexPageViewModel {
agencies: any;
constructor () {
this.agencies = ko.observableArray([]);
}
}
}
var ivm = new ViewModel.IndexPageViewModel();
ivm.agencies.push({name: "name", alias : "alias"});
for (var i = 0; i < ivm.agencies.length; i++){
alert(ivm.agencies[i].name);
}
Ser tillräckligt enkelt ut, men när jag försöker få åtkomst till egenskapen agencies som angivits, hänger körningen. Missade jag något?
Svar #1
Den här raden är där ditt misstag är:
agencies[i]
När du får åtkomst till en observerbar array, är den faktiskt inlindad i en funktion så du får åtkomst till den som:
agencies()[i]
Gör dig själv en tjänst och ladda ner Knockout-definitionerna från: https://github.com/borisyankov/DefinitelyTyped
Deklarera sedan dina attribut med typer:
module ViewModel {
export class IndexPageViewModel {
agencies: KnockoutObservableArray;
constructor () {
this.agencies = ko.observableArray([]);
}
}
}
Svar #2
Jag gjorde precis detta i TypeScript 1.3 (även om det borde fungera i äldre versioner också):
pendingAddAssociations: KnockoutObservableArray<ControllerModel> = ko.observableArray<ControllerModel>([]);
till ditt exempel, om du har en Agentur-klass.
export class IndexPageViewModel {
agencies: KnockoutObservableArray<Agency>;
constructor () {
this.agencies = ko.observableArray<Agency>([]);
}
}
Jag har också upptäckt att du kan casta till vilken this.agencies=<any>[]; som helst. Detta är användbart om du använder Knockout ES5-pluginet.
