2016-03-29 10 views
1

コンソールエラーCannot set property 'stepModels' of undefinedが表示されていますが、typescriptは正常にコンパイルされます。私はここで間違って何をしていますか?私は理解できないようだ。どんな助けでも大歓迎です。そしてバインディングの適用時に '未定義のプロパティを設定できません'というエラーが発生する

class ViewModel { 

    public index: number; 
    public percentage: number; 
    public getTemplate: any; 
    public goNext: any; 
    public goPrevious: any; 
    public stepModels: KnockoutObservable<Array<Step>>; 
    public currentStep: KnockoutObservable<Step>; 
    public currentIndex: KnockoutComputed<number>; 
    public currentPercentage: KnockoutComputed<number>; 
    public canGoNext: KnockoutComputed<boolean>; 
    public canGoPrevious: KnockoutComputed<boolean>; 

    constructor() { 
     let self = this; 

     self.stepModels = ko.observableArray([ 
      new Step(1, 'emailTmpl'), 
      new Step(2, 'usernameTmpl'), 
      new Step(3, 'passwordTmpl'), 
      new Step(4, 'questionsMainTmpl'), 
      new Step(5, 'questionsTmpl'), 
      new Step(6, 'questionsFinalTmpl'), 
      new Step(7, 'verifyTmpl'), 
      new Step(8, 'successTmpl') 
     ]); 
    } 
} 

は:ko.applyBindingsに

ko.applyBindings(ViewModel, element); 
+0

'stepModels'プロパティを初期化していないようです。 –

+0

このビューモデルをどのようにインスタンス化しますか? – Alex

+0

@Alex 'ko.applyBindings(ViewModel、element); ' –

答えて

1

最初のパラメータは、ノックアウトのためのビューモデルを表すオブジェクトであるべきです。 Knockoutはtypescriptクラスに関する知識がないので、ko.applyBindingsに送る前にクラスを目的のオブジェクトにインスタンス化する必要があります。

インスタンス化したくない場合は、理論的にはクラス自体を送信できますが、静的フィールドとしてクラスのプロパティを定義して、渡されるオブジェクトに直接結びつくようにする必要があります私はそれをするのには何のポイントもないと思うが。