Google Closure Library - добавление дочерних элементов не TreeNode к TreeNode - PullRequest
1 голос
/ 16 апреля 2010

Я использую библиотеку Google Closure и goog.ui.tree, в частности, для построения компонента с древовидной структурой. Он работает довольно хорошо из коробки, но я хотел бы добавить несколько дополнительных элементов управления для каждого из листьев (в частности, goog.ui.Checkboxes).

Проблема в том, что Component.addChild был переопределен в BaseNode, так что каждый добавленный дочерний элемент обрабатывается как дочерний узел дерева , а не дочерний компонент . По сути, возникает множество ошибок, если вы пытаетесь добавить что-либо, кроме фактического узла дерева, в качестве дочернего, так как эти дочерние элементы пройдены и для них вызваны специфичные для BaseNode функции.

Я должен признать, что я новичок в Closure, но я считаю, что для этого должен быть какой-то обходной путь, верно? По сути, все, что я хочу сделать, - это установить флажки рядом с каждым листом в моем дереве.

Спасибо, Andreas

Ответы [ 2 ]

1 голос
/ 16 апреля 2010

В дополнение к более общему комментарию, который я оставил по вашему вопросу, я нашел следующее свойство на goog.ui.tree.BaseNode, которое может работать для простых нужд:

/**
 * Html that can appear after the label (so not inside the anchor).
 * @type {string}
 * @private
 */
goog.ui.tree.BaseNode.prototype.afterLabelHtml_ = '';

Это можно установить с помощью:

/**
 * Sets the html that appears after the label. This is useful if you want to
 * put extra UI on the row of the label but not inside the anchor tag.
 * @param {string} html The html.
 */
goog.ui.tree.BaseNode.prototype.setAfterLabelHtml = function(html)
0 голосов
/ 03 мая 2013

Похоже, что реализация родительского класса TreeNode - goog.ui.tree.BaseNode - нарушила некий контракт, связанный с классом-предком Component.

Очевидно, что переопределение метода goog.ui.tree.BaseNode.addChildAt изменило родительскую спецификацию, поскольку оно игнорирует логический атрибут рендеринга.

Обходной путь - форсировать рендеринг, расширяя узлы дерева, которые вам нужны для немедленного использования. После того, как вы можете свернуть их снова.

Реализация немного дрянная для этого компонента.

tree = new goog.ui.tree.TreeControl( 'dammed useless node if show root = false' );
tree.setShowRootNode( false );
tree.render(); // at doc body

ref = new goog.ui.tree.TreeNode( 'click me' );
tree.add( ref );
tree.expandAll();
// now you can attach your checkbox
cb = new goog.ui.Checkbox( true );
cb.renderBefore( ref.getLabelElement() );
tree.collapseAll();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...