我正在尝试将元素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()
无法找到它(请参阅控制台消息)。
答案 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)
答案 2 :(得分:-1)
以下是工作编辑Fixed 问题是你在sId字段中传递对象引用,而getCore()需要一个字符串。 sId.sId获取您传递的控件的ID,这似乎有效。