1

我正在使用 Google Closure Library 和 goog.ui.tree 特别构建一个树形结构 GUI 组件。它开箱即用,效果很好,但我想为每个叶子添加一些额外的控件(特别是 goog.ui.Checkboxes)。

问题是 Component.addChild 已在 BaseNode 中被覆盖,因此每个添加的子节点都被视为子树节点,而不是子组件。实际上,如果您尝试将除实际树节点之外的任何其他内容添加为子节点,则会引发大量错误,因为遍历这些子节点并在它们上调用特定于 BaseNode 的函数。

我必须承认我是一个相当封闭的新手,但我认为必须有一些解决方法,对吧?基本上我想做的就是在我的树的每片叶子旁边出现一堆复选框。

谢谢, 安德烈亚斯

4

2 回答 2

1

除了我对您的问题留下的更一般的评论之外,我在 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)
于 2010-04-16T16:38:42.437 回答
0

看起来 TreeNode 父类实现 - goog.ui.tree.BaseNode - 违反了一些与祖先类组件相关的合同。

很明显,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();
于 2013-05-03T17:19:43.040 回答