如何访问EventListener之外的方法? (SAPUI5)

时间:2016-05-11 06:52:43

标签: scope this sapui5

我有一个像这样的MenuItem:

new sap.ui.unified.MenuItem({
    text: "ID",
    submenu: new sap.ui.unified.Menu({
        items: [this.oIdMenuButton = new sap.ui.unified.MenuItem({
            text: "IDs anzeigen/ausblenden",
            icon: "resources/images/check.png",
            select: this._onShowHideIdRequest
        })]
    })
})

像这样的EventListener:

_onShowHideIdRequest: function (oControlEvent) {

}

此代码位于组件内部。现在出现的问题是:我无法访问组件本身。因为当我调用this.时,我访问了触发事件的MenuItem。如何访问此EventListener方法之外的方法?我知道有sap.ui.getCore().byId(id)但通常我不知道我的组件的ID。而且我也无法存储id,因为我无法访问EventHandler中的id。

2 个答案:

答案 0 :(得分:1)

使用这行代码修改对_onShowHideIdRequest的调用,它将允许访问Component。

this._onShowHideIdRequest.bind(this);

答案 1 :(得分:0)

您可以将大量参数传递给select [1]

// a function that will be called
function
// same as above
[ function ]
// the function will be called, value of this is the context-object
[ function, context ]
// the function will be called, the value of this is the context-object, the data will be passed to the function as argument
[ data, function, object ]

示例:

var ctx = {foo: "bar"};
new MenuItem({
    select: [
        function () {
            console.log(this.foo);
        }, ctx
    ]
});

应该会导致记录" bar"