将元素ID作为函数参数传递

时间:2015-08-30 12:24:19

标签: javascript sapui5

我正在尝试将元素ID作为函数的参数之一传递:

sap.ui.getCore().byId("idView1").getController().addField("selectedFieldsContainer", oItem);

addField函数的定义如下:

addField: function(sId, oItem){
    var oSelectedFieldsContainer = sap.ui.getCore().byId(sId);
    oSelectedFieldsContainer.addItem(oItem);
}

当我运行代码时,我收到错误:

  

未捕获的TypeError:无法读取属性' addItem'未定义的

但是如果我尝试明确定义id:

sap.ui.getCore().byId("idView1").getController().addField(oItem);

虽然函数的定义是:

addField: function(oItem){
    var oSelectedFieldsContainer = sap.ui.getCore().byId("selectedFieldsContainer");
    oSelectedFieldsContainer.addItem(oItem);
}

代码有效。

我不明白为什么第一个例子不起作用。

我错过了什么?

谢谢。

更新

HERE是JSBIN。我想更新控件的类型。我尝试将此控件的ID作为参数传递,但sap.ui.getCore().byId()无法找到它(请参阅控制台消息)。

3 个答案:

答案 0 :(得分:0)

你应该知道调用

sap.ui.getCore().byId("control")

不返回String。从变量名称sId我可以猜到你期望收到一个字符串。相反,它返回具有给定id的控件。因此,你的changeType()函数不起作用。您将对找到的控件的引用传递给changeType()函数,或者传递字符串sap.ui.getCore()。byId(sId)。 jsbin传递找到的控件而不是id。传递id字符串也很容易......

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/>

        <title>Example</title>

        <script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js" 
            id="sap-ui-bootstrap"
            data-sap-ui-libs="sap.m,sap.ui.layout" 
            data-sap-ui-theme="sap_bluecrystal"
            data-sap-ui-bindingSyntax="complex"
            data-sap-ui-compatVersion="edge"
            data-sap-ui-preload="sync"></script>


        <script type="text/javascript">

            function changeType(oControl, sType){
                oControl.setType(sType);
            }

            var oButton = new sap.m.Button({
                text: "Update Control Type",
                press: function(){
                    var oControl = sap.ui.getCore().byId("control");
                    var sType = "Password";
                    changeType(oControl, sType);
                }
            });

            var oItem = new sap.m.Input("control");
            new sap.m.HBox({
                items: [oButton, oItem]
            }).placeAt("content");

        </script>

    </head>
    <body id="content" class="sapUiBody">
    </body>
</html>

答案 1 :(得分:0)

对不起,大家。

问题隐藏在其他地方。

请参阅this问题的答案。

答案 2 :(得分:-1)

以下是工作编辑Fixed 问题是你在sId字段中传递对象引用,而getCore()需要一个字符串。 sId.sId获取您传递的控件的ID,这似乎有效。