WebOS 3.0 从函数访问 UI

WebOS 3.0 Access to UI from function

我无法在 WebOS 3.0 中从 function:onComplete 访问 enyo 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 

我没有找到任何关于此的文档。

错误的原因是您的回调函数没有在组件的上下文中执行。 this 不是您的组件(更不用说您在 $.txt... 前面缺少关键字 this)。

您需要做的是绑定回调函数的上下文或使用它在包含对 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