2017-02-20 16 views
0

WebOS 3.0의 onComplete 함수에서 enyo Ui 구성 요소에 액세스 할 수 없습니다.WebOS 3.0 함수에서 UI에 액세스

buttonTapped: function(inSender, inEvent) { 
    console.log("Button is clicked"); 
    this.$.txt.setContent(inSender.name + " tapped."); // This worked 
    var request = webOS.service.request("luna://com.webos.service.tv.systemproperty", { 
     method: "getSystemInfo", 
     parameters: {"keys": ["modelName", "firmwareVersion", "UHD", "sdkVersion"]}, 
     onComplete: function (inResponse) { 
      var isSucceeded = inResponse.returnValue; 
      if (isSucceeded){ 
       console.log("Result: " + JSON.stringify(inResponse)); 
       $.txt.setContent("Result: "+JSON.stringify(inResponse)); // This is not worked 
      } 
     } 
    }); 
... 

이것에 대해 어떤 문서를 찾을 수 없습니다

 
Button clicked 
Result{"modelName":"WEBOS1","firmwareVersion":"03.00.00","UHD":"false","sdkVersion":"03.00.00","returnValue":true} 
Uncaught TypeError: Cannot read property 'txt' of undefined 

콘솔 출력.

답변

1

오류의 원인은 구성 요소 컨텍스트에서 콜백 함수가 실행되지 않기 때문입니다. this은 귀하의 구성 요소가 아닙니다 (this$.txt... 앞에 누락되었습니다.)

당신이해야 할 일은 콜백 함수의 컨텍스트를 바인딩하거나 this에 대한 참조를 포함하는 변수에 대해 클로저를 만드는 것입니다.

이것은 Enyo가이 유틸리티 메서드 인 this.bindSafely을 제공하는 일반적인 경우입니다.

onComplete: this.bindSafely(function (inResponse) { 
    var isSucceeded = inResponse.returnValue; 
    if (isSucceeded){ 
     console.log("Result: " + JSON.stringify(inResponse)); 
     this.$.txt.setContent("Result: "+JSON.stringify(inResponse)); 
    } 
}) 

참조 : http://enyojs.com/docs/latest/#/kind/enyo/CoreObject/Object:bindSafely

는 다음 시도