Javascript 将元素ID作为函数参数传递
我试图将元素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
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容器,我想在其中添加新控件。如果您能知道在这里进行否决投票的原因,我将不胜感激。我们将在将来尝试更正此问题。