Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将元素ID作为函数参数传递_Javascript_Sapui5 - Fatal编程技术网

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

Javascript 将元素ID作为函数参数传递,javascript,sapui5,Javascript,Sapui5,我试图将元素ID作为函数的参数之一传递: sap.ui.getCore().byId("idView1").getController().addField("selectedFieldsContainer", oItem); addField函数的定义如下: addField: function(sId, oItem){ var oSelectedFieldsContainer = sap.ui.getCore().byId(sId); oSelectedFieldsCont

我试图将元素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);
}
代码是有效的

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

我错过了什么

多谢各位

使现代化 是杰宾。我想更新控件的类型。我试图将此控件的id作为参数传递,但
sap.ui.getCore().byId()
找不到它(请参阅控制台消息)。

这是正在进行的编辑。

问题是您正在sId字段中传递对象引用,而getCore()需要一个字符串。sId.sId获取您正在传递的控件的id,这似乎有效。

您应该知道调用

sap.ui.getCore().byId("control")
不返回字符串。从变量名sId中,我可以猜到您希望收到一个字符串。相反,它返回具有给定id的控件。因此,changeType()函数不起作用。要么将对找到的控件的引用传递给changeType()函数,要么传递字符串sap.ui.getCore().byId(sId)。传递找到的控件而不是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>

实例
函数更改类型(oControl,sType){
oControl.setType(sType);
}
var oButton=新的sap.m.按钮({
文本:“更新控件类型”,
按:函数(){
var oControl=sap.ui.getCore().byId(“控制”);
var sType=“密码”;
变更类型(oControl、sType);
}
});
var oItem=新的sap.m.Input(“控制”);
新sap.m.HBox({
项目:[按钮,oItem]
}).placeAt(“内容”);
对不起,各位

问题隐藏在别处


请查看问题的答案。

能否提供一个jsbin示例?。你能详细说明一下你的文件夹结构吗。喜欢有关应用程序文件夹结构的详细信息。此外,当ID指向函数时,控制台值oselectedfields包含在第一个文件夹中?@Veeraraghavan文件夹结构非常简单-所有函数都在控制器中,一个接一个,用逗号分隔。oSelectedFieldsContainer是一个VBox容器,我想在其中添加新控件。如果您能知道在这里进行否决投票的原因,我将不胜感激。我们将在将来尝试更正此问题。