2017-02-20 1 views
0

Ich kann nicht auf enyo Ui Komponente von Funktion zugreifen: onComplete in WebOS 3.0.WebOS 3.0 Zugriff auf UI von Funktion

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 
      } 
     } 
    }); 
... 

Konsolenausgabe

 
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 

ich keine Unterlagen darüber gefunden.

Antwort

1

Der Grund für den Fehler ist, dass Ihre Callback-Funktion nicht im Kontext Ihrer Komponente ausgeführt wird. this ist nicht Ihre Komponente (ganz zu schweigen davon, dass Ihnen das Schlüsselwort this vor $.txt... fehlt).

Sie müssen den Kontext der Callback-Funktion binden oder eine Closure über eine Variable erstellen, die einen Verweis auf this enthält.

Dies ist ein solches häufiges Vorkommen, dass Enyo bietet eine Hilfsmethode dafür: this.bindSafely.

Versuchen Sie Folgendes:

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

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

Verwandte Themen