1

特に Google Closure Library と goog.ui.tree を使用して、ツリー構造の GUI コンポーネントを構築しています。そのままで十分に機能しますが、各リーフ (特に goog.ui.Checkboxes) にいくつかのコントロールを追加したいと思います。

問題は、Component.addChild が BaseNode でオーバーライドされたため、追加された各子が子コンポーネントではなく子ツリー ノードとして扱われることです。実際には、実際のツリー ノード以外のものを子として追加しようとすると、これらの子がトラバースされ、BaseNode 固有の関数が呼び出されるため、多くのエラーがスローされます。

私は Closure の初心者であることを認めなければなりませんが、これには何らかの回避策があるはずだと思いますよね? 基本的にやりたいことは、ツリーの各リーフの横に多数のチェックボックスを表示することだけです。

ありがとう、アンドレアス

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 - が、祖先クラス Component に関連する契約に違反しているようです。

goog.ui.tree.BaseNode.addChildAt メソッドのオーバーライドによって親の仕様が変更されたことは明らかです。これは、render boolean 属性が無視されるためです。

回避策は、すぐに使用する必要があるツリー ノードを展開してレンダリングを強制することです。もう一度折りたたむことができます。

このコンポーネントの実装は少しお粗末です。

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 に答える