Компонент библиотеки закрытия + шаблоны закрытия
Когда вы добавляете компонент Closure как дочерний компонент другого компонента, они также должны быть родительскими и дочерними в DOM. На самом деле это довольно полезное ограничение.
Дело в том, что у меня есть несколько сложных компонентов Closure, и было бы предпочтительнее создавать их HTML с использованием шаблонов Closure (соя). В какой-то момент у меня есть виджет, который имеет много элементов внутри, и есть несколько флажков на несколько уровней вниз, который должен быть другим компонентом закрытия. Но, учитывая вышеуказанное ограничение, я не могу добавить компонент-флажок как прямой дочерний элемент виджета.
Компонент замыкания может быть простым div
DOM
элемент:
<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);
Если у меня возникли проблемы с этим, я не могу вспомнить их сейчас, поэтому стоило бы разобраться.