HtmlBoxLayout

HtmlBoxLayou - HTML 盒子布局 是一个可以在 HTML 模板中定义组件位置的容器。

组件的 XML 名称:htmlBox

不要将 HtmlBoxLayout 用于动态内容或嵌入 JavaScript 代码,如需要的话,请使用 BrowserFrame

基本用法

如需在布局容器中使用模板,需要创建 自定义主题。在自定义主题的子目录下,创建 layouts 文件夹,这里放置所有的 HTML 模板。例如,可以创建模板如下:

<div location="logo" class="logo"></div>
<table class="component-container">
    <tr>
        <td>
            <div location="email" class="email"></div>
        </td>
        <td>
            <div location="submit" class="submit"></div>
        </td>
    </tr>
</table>

模板应包含带有 location 属性的 <div> 元素。这些元素将显示 XML 中用相同 id 定义的组件。

helium-extended.scss 文件中,为模板中 location 属性指定的变量设置样式:

@import "../helium/helium";

@mixin helium-extended {
  @include helium;

  .email {
    width: 390px;
  }

  .submit {
    width: 100px;
  }

  .logo {
    font-size: 96px;
    text-transform: uppercase;
    margin-top: 50px;
  }

  .component-container {
    display: inline-block;
    vertical-align: top;
    width: 100%;
  }
}

项目树结构如下:

html box layout tree

然后可以在界面控制器中使用模板了(htmlBoxtemplate 属性指定使用的模板):

<htmlBox align="TOP_CENTER"
         template="sample"
         width="500px">
    <label id="logo"
           value="Subscribe"
           stylename="logo"/>
    <textField id="email"
               width="100%"
               inputPrompt="email@test.test"/>
    <button id="submit"
            width="100%"
            caption="Subscribe"/>
</htmlBox>
html box layout

templateContents 元素

还可以使用 templateContents 元素直接设置模板内容并绘制自定义布局。示例:

<htmlBox id="htmlSample"
         height="275px"
         htmlSanitizerEnabled="false"
         stylename="html-sample">
    <templateContents>
        <![CDATA[
                <div class="box-container">
                    <label class="logo">Jmix</label>
                    <div class="button-container">
                        <div class="sample-button addons-button"
                             location="addons">
                        </div>
                        <div class="sample-button buy-button"
                             location="buy">
                        </div>
                        <div class="sample-button support-button"
                             location="support">
                        </div>
                    </div>
                </div>
            ]]>
    </templateContents>
    <button id="addons"
            caption="Addons"
            width="100%"/>
    <button id="buy"
            caption="Buy"
            width="100%"/>
    <button id="support"
            caption="Support"
            width="100%"/>
</htmlBox>
@import "../helium/helium";

@mixin helium-extended {
  @include helium;
  .box-container {
    text-align: center;
  }

  .box-container .logo {
    width: 500px;
    margin: 50px auto;
  }

  .button-container {
    width: 500px;
    margin: 0 auto;
  }

  .button-container .sample-button {
    width: 166px;
    display: inline-block;
    vertical-align: top;
  }

  .box-container .button-container {
    width: 500px;
    margin: 0 auto;
    text-align: left;
  }

  .html-sample {
    white-space: nowrap;
    position: relative;
  }

  .button-container .sample-button:first-child .v-widget {
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
    margin-left: 3px;
  }

  .button-container .sample-button .v-widget {
    vertical-align: middle;
    margin-left: -4px;
    height: 50px;
    font-size: 20px;
  }

  .button-container .sample-button ~ .sample-button:not(:last-child) .v-widget {
    border-radius: 0;
  }

  .button-container .sample-button:last-child .v-widget {
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
    margin-left: -8px;
  }
}
html box layout template contents