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.

Relaterade artiklar