首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将视图(子)插入父布局的div?Vaadin 10 / Flow

如何将视图(子)插入父布局的div?Vaadin 10 / Flow
EN

Stack Overflow用户
提问于 2018-06-26 01:59:00
回答 2查看 1.4K关注 0票数 3

我有一个实现RouterLayout的组件,如下所示:

代码语言:javascript
复制
@Tag("side-menu")
@HtmlImport(value = "src/components/side-menu.html")
public class SideMenu extends PolymerTemplate<TemplateModel> implements RouterLayout {

    @Id("menu")
    private PaperListBox listBox = new PaperListBox();

    public SideMenu() {

        listBox.addMenu(new PaperItem("tutorial", TutorialView.class));
        listBox.addMenu(new PaperItem("icons", IconsView.class));

    }
}

我路由父布局的视图子节点。

代码语言:javascript
复制
@Route(value=IconsView.VIEW_ROUTE, layout = SideMenu.class)
public class IconsView extends Div {

    public static final String VIEW_ROUTE = "icons";

    public IconsView() {
        add(new Label("ICONS VIEW"));
    }

}

但是结果覆盖了side-menu.html文件的所有内容。

side-menu.html模板库格式

代码语言:javascript
复制
<side-menu>
    <div>App Name</div>
    <div id="menu"></div>
    <div id=contenido><!-- I want to show here my view Icons --></div>
</side-menu>

但结果是

代码语言:javascript
复制
<side-menu>
    <div>
       <label>ICONOS VIEW</label>
    </div>
</side-menu>

预期结果是:

代码语言:javascript
复制
<side-menu>
    <div>App Name</div>
    <div id="menu"></div>
    <div id=contenido>
       <div>
          <label>ICONOS VIEW</label>
        </div>
    </div>
</side-menu>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-27 13:55:52

vaadin文档中这样说:

您可以使用ComponentElement API向模板中添加子组件,但是由于PolymerTemplate使用影子DOM ,所以阴影树被呈现,而不是轻量DOM中的元素子。 这意味着模板需要有一个<slot></slot>来标记轻型DOM元素应该呈现的位置。

我为这个复合布局找到了一个解决方案:

我只需要修改我的模板side-menu.html并添加如下<slot>标记:

代码语言:javascript
复制
<side-menu>
    <div>App Name</div>
    <div id="menu"></div>
    <slot></slot>
</side-menu>

然后,当我的视图被加载时,它被呈现到模板中的<slot>标记中。

票数 1
EN

Stack Overflow用户

发布于 2018-06-26 06:07:47

在您的例子中的问题是,由于没有功能的裸模板,以及绑定和自定义模板模型,服务器端不知道它的内容。因此,Div.add()将其视为空div,并覆盖其内容。

在您的示例中,一种方法是通过元素API修改内容,这可以是如下所示:

代码语言:javascript
复制
public IconsView() {
    label = new Label("ICONS VIEW");
    getElement().appendChild(label.getElement());
}

见API规范

https://demo.vaadin.com/javadoc/com.vaadin/vaadin-core/10.0.0.rc5/com/vaadin/flow/dom/Node.html#appendChild-com.vaadin.flow.dom.Element...-

另一种方法是将html模板扩展为功能齐全的聚合物元素。

关于这一点还有更多的内容,例如:

https://vaadin.com/docs/v10/flow/polymer-templates/tutorial-template-list-bindings.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51033900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档