尝试在FlexBox容器内扩展Input的宽度。我希望它与父容器的宽度相同。这是我的view.xml:
<mvc:View xmlns:l="sap.ui.layout" xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m">
<l:VerticalLayout id="idVL" class="sapUiContentPadding" width="100%">
<l:content>
<Panel id="idPnl">
<FlexBox id="idFB">
<Input id="idInput">...</Input>
</FlexBox>
</Panel>
</l:content>
</l:VerticalLayout>
</mvc:View>
在浏览器中检查页面显示父FlexBox实际上扩展到VerticalLayout中设置的宽度。但是,SAPUI5会自动创建一个子div,它不会扩展到整个宽度,并将输入放在:
<div id="xxxxx---view--idFB" data-sap-ui="..." class="..."> //This is the parent FlexBox, it extends to the size of VerticalLayout element.
<div id="__data4" style="order:0;flex-grow:0;flex-shrink:1;..." class="..."> //This sub-FlexBox is created automatically, and is smaller than it's parent.
<div id="xxxxx---view--idInput ...> //The input is placed here.
...
</div>
</div>
</div>
我可能是错的,但我怀疑“flex-grow:0”是罪魁祸首,我无法找到访问此属性的方法。我尝试在#idFB中的css中设置它,但是没有用。还尝试将其设置在sub-div使用的某些类(如“.sapMFlexItem”)中,也无法正常工作。尝试将每个容器的宽度设置为100%,也不起作用。该文档未提及有关手动设置flex属性的任何信息。
如何将flex-grow设置为1,或者通过其他方法使输入扩展到VerticalLayout的相同宽度?
注意:我不是100%在这里使用FlexBox销售;我只是不知道我可以用来放置输入和按钮的任何其他容器,并以编程方式在页面中插入更多,即:
controller.js:
addInput: function () {
var oInput = this.byId("idInput").clone();
var delButton = new sap.m.Button({
icon: "sap-icon://delete",
press: this.deleteInput
});
var _oLayout = new sap.m.FlexBox({ // Some other better container?
items: [oInput, delButton]
});
this.byId("idPnl").addContent(_oLayout);
}
弄清楚了。需要在Input中放置以下内容:
<Input>
...
<layoutData>
<FlexItemData growFactor="1"/>
</layoutData>
</Input>