无法在运行时创建UI控件

时间:2017-09-12 12:39:42

标签: sapui5

我正在尝试创建一个我有Panel的屏幕。主Panel有另一个Panel,此Panel的{​​{1}}有四个Grid,每个HBoxes最终有HBox }}

Button

我可以看到每个 onInit:function(){ oMainPanel.removeAllContent(); var oHbox1 = new sap.m.HBox(jQuery.sap.uid()); var oHbox2 = new sap.m.HBox(jQuery.sap.uid()); var oHbox3 = new sap.m.HBox(jQuery.sap.uid()); var oHbox4 = new sap.m.HBox(jQuery.sap.uid()); var oPanel ; var oGrid; for (var i = 0; i < 4; i++) { oGrid = new sap.ui.layout.Grid(jQuery.sap.uid(),{ hSpacing: 1, vSpacing: 1, content: [oHbox1,oHbox2,oHbox3,oHbox4] }); oPanel = new sap.m.Panel(jQuery.sap.uid(),{ headerText: "Some Text", expandable: true, expanded: true, width:"100%", content:[oGrid] }); jQuery.sap.delayedCall(100, this, function() { }); oMainPanel.addContent(oPanel); } 中的内容,但仅限于最后一个HBox。我认为这些是重叠的。如何在所有Panel中显示所有HBoxes的内容?

2 个答案:

答案 0 :(得分:2)

您正尝试将// Object references (memory location) are stored in variables var objA = { x: "test", y: function(){ alert("Hi"); } }; var objB = { x: "test", y: function(){ alert("Hi"); } }; var objC = { x: "test", y: function(){ alert("HI"); } }; // Stringify the object using a replacer function that will explicitly // turn functions into strings so they won't be skipped like regular // JSON.stringify() does function stringifyAllMembers(obj) { return retVal = JSON.stringify(obj, function(key, val) { return (typeof val === 'function') ? '' + val : val; }); } // Get the string primitive value of each object var a = stringifyAllMembers(objA); var b = stringifyAllMembers(objB); var c = stringifyAllMembers(objC); // Compare each primitive to compare each object: console.log(a === b); // true console.log(a === c); // false 的相同实例用作不同HBox的{​​{1}}。您需要为每个content创建一个新实例。

尝试做类似的事情:

Grids

或在循环中初始化变量(Panel oGrid = new sap.ui.layout.Grid(jQuery.sap.uid(),{ hSpacing: 1, vSpacing: 1, content: [new sap.m.HBox(), new sap.m.HBox(), new sap.m.HBox(), new sap.m.HBox()] 等)

答案 1 :(得分:0)

我通过使用forEach而不是for循环解决了这个问题。