Knockout $ parent和Typescript重写函数

时间:2014-08-28 16:37:21

标签: knockout.js typescript

我有一个继承了typecript类A的打字稿类B.

A类有一个名为Model的KnockoutObservable。

A类有一个名为GetSomeNumber()的函数,它返回一个数字

export class A{ 
    Model: KnockoutObservable<C>;
    constructor(){ this.Model = ko.observable(new C()); } 
    GetSomeNumber (): number { return 1; }
}

B类扩展了A类并覆盖了函数GetSomeNumber()

export class B extends A{
    GetSomeNumber(): number { return 2; }
}

在Knockout绑定中,我在类B的实例上绑定到Model的元素上引用$parent.GetSomeNumber()

虽然我收到以下错误...

  

无法获得财产&#39; GetSomeNumber&#39;未定义或空引用

但是,如果我从B类中删除覆盖,它确实有效。

2 个答案:

答案 0 :(得分:1)

可能B类未初始化。确保 class B之后包含class A,例如检查脚本标记中的顺序,或者使用--out检查reference.ts

中的顺序

答案 1 :(得分:0)

B类的GetSomeNumber函数实际上是在一个B类成员上调用GetSomeNumber。此时,成员属性尚未初始化。我的B级更像是这样......

export class B extends A{
   somethingElse: C

   constructor(something: C){
       this.somethingElse = something; 
   }

   GetSomeNumber(): number { return this.somethingElse.GetSomeNumber(); }
}

要解决这个问题,我现在检查是否已初始化了某些内容......

export class B extends A{
   somethingElse: C

   constructor(something: C){
       this.somethingElse = something; 
   }

   GetSomeNumber(): number { 
      if(this.somethingElse)
         return this.somethingElse.GetSomeNumber(); 
      else
         return 0;
   }
}

混淆的原因是C类的函数与B类的函数同名,所以我误解了错误信息。