Ширина ввода внутри гибкого ящика SAPUI5

#flexbox #sapui5

#гибкий блок #sapui5

Вопрос:

Пытаюсь увеличить ширину ввода внутри контейнера FlexBox. Я бы хотел, чтобы она была той же ширины, что и родительский контейнер. Это мой 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>
  

Проверка страницы в браузере показывает, что родительский гибкий блок фактически расширяется до ширины, установленной в VerticalLayout. Однако SAPUI5 автоматически создает дополнительный раздел, который не распространяется на всю ширину, и помещает ввод внутрь этого:

 <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», и я не могу найти способ получить доступ к этому свойству. Я попытался установить его в css внутри #idFB, но это не сработало. Также пытался установить его внутри некоторых из тех классов, которые используются подразделением (например, «.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);
}
  

Ответ №1:

Понял это. Необходимо поместить следующее внутри ввода:

 <Input>
    ...
    <layoutData>
        <FlexItemData growFactor="1"/>
    </layoutData>
</Input>
  

Комментарии:

1. Я пытался вставить список внутри гибкого ящика, и это меня спасло. Большое вам спасибо!