SAPUI5调用函数来自同一控制器中的另一个函数

时间:2018-06-16 07:15:15

标签: javascript sapui5 function-call

我试图通过在自己的函数中存储一些函数代码来使我的代码看起来更干净。然而,这没有成功。控制台中未记录任何错误。

这是我的代码:

onPressScan: function() {
sap.ndc.BarcodeScanner.scan(
    // calling the function at this point works
    function(mResult) {
        if (!mResult.cancelled) {
            // call another function from the same controller
            this.handleData(mResult.text);
        }
    },
    function(Error) {
        sap.m.MessageBox.error("Scanning failed due to following error: " + Error, {
            title: "Error while scanning"
        });
    }
),

handleData: function(data) {
sap.m.MessageBox.success("Calling function worked: " + data, {
    title: "Success"
});
}

出于测试目的,我将handleData函数最小化。我刚才尝试的是在上面调用一个函数(没有抛出两个函数调用......)。这有效。但是,我需要调用函数,您可以在代码中看到它。我怎样才能做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:0)

您的上下文已更改,上下文中的this不再是控制器。

在正确的位置为this添加句柄 - 例如

var that = this;

然后将代码更改为您想要从控制器访问此功能的位置:

that.handleData(mResult.text);

您的代码应该更改为:

onPressScan: function() {
sap.ndc.BarcodeScanner.scan(
    var that = this;
    function(mResult) {
        if (!mResult.cancelled) {
            that.handleData(mResult.text);
        }
    },
    function(Error) {
        sap.m.MessageBox.error("Scanning failed due to following error: " + Error, {
            title: "Error while scanning"
        });
    }
),

handleData: function(data) {
sap.m.MessageBox.success("Calling function worked: " + data, {
    title: "Success"
});

}