1

当你添加一个闭包组件作为其他组件的子组件时,它们在DOM中也应该是父子组件。这实际上是一个非常有用的约束。

问题是我有一些复杂的闭包组件,最好使用闭包模板(soy)创建它们的 HTML。在某些时候,我有一个小部件,里面有很多项目,并且有一个复选框向下几级,应该是另一个Closure Component。但鉴于上述约束,我无法将复选框组件添加为小部件的直接子级。

闭包组件可以像div DOM元素一样简单:

<div id='main-component'>
    <p>
        <input id='sub-component' type='checkbox' />
    </p>
</div>

复选框将是一个内部组件。但是如果我使用闭包模板,我如何渲染整个 HTML,然后将复选框设置为不同的组件?

4

2 回答 2

2

子组件必须是后代,不一定是 DOM 中的子组件,请参见方法文档的示例addChildAt。所以在这种情况下调用 addChild(child, false) 是可以的。

此外,您可以覆盖getContentElement父组件的方法以返回应添加子组件的元素,在这种情况下,如果需要,您可以使用 addChild(child, true) 代替装饰。

于 2014-01-10T22:48:34.020 回答
1

老实说,我对大豆模板不是很熟悉,但我知道您可以调用goog.ui.Component.addChild将第二个参数 (opt_render) 设置为 false,这会将组件添加为子组件,但不会尝试直接在内部渲染它。我过去曾使用它来在组件之间建立非直接的父子关系。

例子 :

var main = new goog.ui.Component();
main.decorate(goog.dom.getElement('main-component'));
var sub = new goog.ui.Component();
sub.decorate(goog.dom.getElement('sub-component'));
main.addChild(sub, false);

如果我在这样做时遇到问题,我现在不记得了,所以值得研究一下。

于 2013-10-08T14:10:00.420 回答