【问题标题】:Uncaught TypeError: Cannot set property 'model' of undefined未捕获的类型错误:无法设置未定义的属性“模型”
【发布时间】:2016-08-04 20:53:45
【问题描述】:

我有一个回调方法和局部变量的特殊问题:

 export class Test {

   model: Article;

   onKeyEnter(value: string) {
    this.model.maktx = "Test1";

    //This is not working
    this.find(value);

    // Direct call is working
    //this.readSuccessCallback(null, null);
  }

  find(nr) {

    [..other stuff]

    OData.read(request, this.readSuccessCallback, this.errorCallback);
  }

   readSuccessCallback(data, response) {  
     this.model.maktx = "Test2";
  }
}

当我直接从onKeyEnter 调用readSuccessCallback 时,"Test2" 的值设置正确

如果从OData.read 调用readSuccessCallback 方法 (SAP Kapsel 3rd Party) 发生异常:

未捕获的类型错误:无法设置未定义的属性“模型”。

有人知道发生了什么吗?我不知道OData.read 到底在做什么,但似乎我不会回到我离开的地方?

【问题讨论】:

    标签: typescript angular


    【解决方案1】:

    试试这个:

    OData.read(request, this.readSuccessCallback.bind(this), this.errorCallback.bind(this));
    

    【讨论】:

    • 您好 yurzui,感谢您的回答。您的解决方案有效!
    【解决方案2】:

    在我看来,您的readSuccessCallback 被调用,但this 已变为undefined。当您在严格模式下工作时可能会出现这种情况(我相信这是 1.8 以上的默认模式)。

    我不能在这里测试这个,但是像这样定义你的回调:

    public readSuccessCallback(data, response) = (data, response) => {
      this.model.maktx = "Test3";
    }
    

    这应该导致this 指向您的实际实例。

    【讨论】:

    • 嗨,罗伊,感谢您的回答。此语法不起作用。 ) 之后是 { 或 ;预计。
    猜你喜欢
    • 1970-01-01
    • 2017-03-30
    • 2011-03-11
    • 2013-06-16
    • 2016-11-08
    • 2012-05-27
    • 1970-01-01
    相关资源
    最近更新 更多