2011-07-12 2 views
1

私はDijit.Treeコントロールをマークアップコードとして記述しています。 今、私はdiv.dijitTreeRowdojo.queryを介して)要素を通り、img -Tagsを追加するためにonloadイベントハンドラを使用しています。Dijit.TreeエントリのIDを取得するには?

編集:明確にするには、私は実際にボタンをonclickイベントで使用する予定であるため、img -Tagsを行に追加したいと思っています。

ただし、img -Tagでは、私はjson経由でツリーに渡していた要素IDが必要です。私はではありません HTML属性idが欲しい!

ストアでラベルを確認することは、重複したエントリで消滅するためオプションではありません。

ツリーメソッドをオーバーライドすることもできません。できるだけ長くマークアップしたいと思っています。

IDを取得するにはどうすればよいですか?あなたは順番にそのitemプロパティに格納されているdijit.Tree.itemを持つことになりますdijit._TreeNodeウィジェットに対応div.dijitTreeNodeにアクセスすることができますdiv.dijitTreeRowから

答えて

0

Dojo IRCチャンネル(名前!)でj105robで回答しました。

最も簡単な方法は、dijit.Treeクラスを上書きし、必要に応じて_createNodeを上書きすることです。 カスタムイベントをノードに接続すると、DnDの機能が停止する可能性があります。

1

まあ、。それを保留にしたら、TreeStoreModelメソッドを使用して必要なIDを取得できます。 DOMノード(div.dijitTreeNode)からDijitウィジェット(dijit._TreeNode)に移動するには、dijit.byNode()を使用します。

// Given rowNode is your div.dijitTreeRow... 
var treeNode = dijit.byNode(rowNode.parentNode); 
var item = treeNode.item; 
var id = model.getIdentity(item); 

しかし、これは問題に近づく正しい方法ではありません。あなたは基本的にウィジェットの内部を混乱させています。あなたのコードは、予期せぬ状況でランダムに破損する可能性があります。後でDojoバージョンをアップグレードする必要がある場合は、確率が高くなります。あなたが本当に欲しい

dijit.Treeウィジェットをサブクラス化し、CSSを通して、あなた自身のgetIconClass/StylegetLabelClass/Styleおよび/またはgetRowClass/Styleと追加画像を提供することです。なぜ、オーバーライドするメソッドはオプションではないと言いますか?

あなたが(例えば、あなたが各ツリーノードにボタンやアクションを追加したい)CSSを得ることができるものよりも多くのカスタマイズが必要な場合は、dijit.Tree_createTreeNodeメソッドをオーバーライドして、いずれかのサブクラスdijit._TreeNodeやスポットでそれをカスタマイズすることができます。次に、メソッドとクラスの両方の冒頭にあるアンダースコアは、プライベートであることを意識してください。したがって、以降のバージョンのDojoでは変更される可能性があります。

私はあなたが_TreeNodeウィジェットをサブクラス化する方法についてのポインタのためのTree.jstheseexcellentチュートリアルのソースを見てみましょうお勧めしたいです。

+0

ありがとうございました!私は各エントリの前にあるアイコンを変更しようとしていません。私は実際に(編集や削除のような)アクションのボタンとして機能するように画像を追加しようとしています。私は何とかオーバーライドすることでそれを達成できるだろうか?また、divからのdijit._TreeNodeインスタンスへのアクセス方法についてもわかりません。 –

+0

私は 'div'から' id'にアクセスするためにいくつかのコードで私の答えを編集しました。あなたがやろうとしていることについては、画像だけでなく各行にロジックを追加する必要があるので、 '_createTreeNode'メソッドをオーバーライドします。 –

+0

ちょっとした提案も追加しました。 –

関連する問題