Компонент библиотеки закрытия + шаблоны закрытия

Когда вы добавляете компонент Closure как дочерний компонент другого компонента, они также должны быть родительскими и дочерними в DOM. На самом деле это довольно полезное ограничение.

Дело в том, что у меня есть несколько сложных компонентов Closure, и было бы предпочтительнее создавать их HTML с использованием шаблонов Closure (соя). В какой-то момент у меня есть виджет, который имеет много элементов внутри, и есть несколько флажков на несколько уровней вниз, который должен быть другим компонентом закрытия. Но, учитывая вышеуказанное ограничение, я не могу добавить компонент-флажок как прямой дочерний элемент виджета.

Компонент замыкания может быть простым divDOM элемент:

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

Флажок будет внутренним компонентом. Но если бы я использовал шаблоны закрытия, как я могу отобразить весь HTML, а затем установить флажок как отдельный компонент?

2 ответа

Решение

Дочерний компонент должен быть потомком, а не обязательно дочерним в DOM, см., Например, документацию по методу addChildAt, Так что в этом случае нормально вызывать addChild(child, false).

Кроме того, вы можете переопределить getContentElement метод родительского компонента для возврата элемента, к которому должны быть добавлены дочерние компоненты, в этом случае вы можете при необходимости использовать addChild(child, true) вместо декорирования.

Честно говоря, я не очень знаком с шаблонами сои, но я знаю, что вы можете позвонить 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);

Если у меня возникли проблемы с этим, я не могу вспомнить их сейчас, поэтому стоило бы разобраться.

Другие вопросы по тегам