8

TypeScriptクラスでKnockoutobservableArrayを初期化する適切な方法は何ですか?

私はこのようなことをしています:

   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);
 }

簡単そうに見えますが、示されているように代理店のプロパティにアクセスしようとすると、実行がハングします。私は何か見落としてますか?

4

2 に答える 2

13

この行はあなたの間違いがどこにあるかです:

agencies[i]

監視可能な配列にアクセスすると、実際には関数にラップされているため、次のようにアクセスします。

agencies()[i]

また、 https://github.com/borisyankov/DefinitelyTypedからノックアウト定義をダウンロードして ください。

次に、タイプを使用して属性を宣言します。

module ViewModel {

    export class IndexPageViewModel {

        agencies: KnockoutObservableArray;

        constructor () {
            this.agencies = ko.observableArray([]);
        }
    }
}
于 2012-10-31T22:42:21.630 に答える
5

TypeScript 1.3でこれを実行しました(ただし、古いバージョンでも機能するはずです)。

pendingAddAssociations: KnockoutObservableArray<ControllerModel> = ko.observableArray<ControllerModel>([]);

たとえば、エージェンシークラスがある場合。

export class IndexPageViewModel {

        agencies: KnockoutObservableArray<Agency>;

        constructor () {
            this.agencies = ko.observableArray<Agency>([]);
        }
    }

また、任意の場所にキャストできることもわかりました。これは、 KnockoutES5プラグインthis.agencies = <any>[];を使用している場合に便利です。

于 2014-12-31T15:44:33.810 に答える