应用绑定时,“无法设置未定义的属性”错误

时间:2016-03-29 15:44:13

标签: javascript knockout.js typescript

所以我收到控制台错误Cannot set property 'stepModels' of undefined但是打字稿编译得很好。我在这做错了什么?我似乎无法弄明白。非常感谢任何帮助。

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(ViewModel, element);

1 个答案:

答案 0 :(得分:1)

ko.applyBindings的第一个参数应该是表示Knockout视图模型的对象。由于Knockout对typescript类没有任何了解,因此在将类发送到ko.applyBindings之前,必须先将类实例化为目标对象。

理论上,如果你不想实例化它,你可以自己发送类,但是你必须将类的属性定义为静态字段,这样它们才能直接在对象上结束虽然我不认为这样做有任何意义。