未捕获的TypeError:无法读取未定义的属性“setVisible”

时间:2014-10-30 12:47:18

标签: sapui5

我是SAPUI5的新手,当我点击按钮时,我会在标题中看到错误 我在做什么?是否使用SAP Web IDE创建新的MVC项目。

在主视图JS中我放

createContent : function(oController) {
    var btn = new sap.m.Button({
            id:"myBtn",
            text : "Content Button"
       });
    return new sap.m.Page({
        title: "TitleT",
        content: [ btn ]
    });
}

在主控制器JS中我输入以下代码

onInit: function() {
    var that = this;
    window.setTimeout(function() {
        that.byId("myBtn").setVisible(true);
    }, Math.random() * 10000);
},

onPress: function() {
    this.byId("pressMeButton").setText("I got pressed");
}

当我运行它时,我看到按钮但是当我点击它时,我在初始化中得到错误, 我在这做错了什么?

2 个答案:

答案 0 :(得分:4)

您的代码的实际问题是您在javascript视图中创建了静态ID,但是如果您调用that.byId(“myBtn”),控制器将使用前缀“__jsview0 - myBtn”搜索id。

因此,您必须在javascript视图中使用createId(“myBtn”)来定义控制器中的id或sap.ui.getCore()。byId(“myBtn”),它才能正常工作。建议采用第一种方法,以避免名称冲突。

PS: 我没有真正得到用例,似乎你只想在某个(随机)时间帧之后显示按钮。但默认情况下,可见标志已经为真,因此按钮始终可见。

答案 1 :(得分:2)

使用SAPUI5中的标准超时和byId函数,如下所示:

onInit: function() {
    setTimeout(function() {
       sap.ui.getCore().byId("myBtn").setVisible(true);
    }, Math.random() * 10000);
},