0

質問:

DOJO TreeGridがある場合、ユーザーがエキスパンド( "+")ボタンをクリックして行を展開し、特定の行番号または関連するアイテムの識別子を保存したときに、イベントをキャプチャするにはどうすればよいですか?これは、TreeGridをDOMから完全に削除し、再構築し、再構築後の状態を復元する(つまり、ユーザーが以前に拡張した行をプログラムで拡張する)という明確な目的のために行います。

バックグラウンド:

そのため、アプリにカスタムのQueryReadStoreに接続されたカスタムのDOJOTreeGridがあります。次のチュートリアルを使用して作成されました。

http://www.ibm.com/developerworks/web/library/wa-dojotreegrid/index.html?ca=drs-

非常に興味深いチュートリアルですが、実際には機能を押しつぶすものではなく、拡張するだけのように見えるため、私の質問とは無関係かもしれません。

とにかく、しばらく調べてみると、DOJOフォーラムで、特定の行インデックスを指定して、プログラムで行を拡張するために使用できる優れた関数を見つけました。完璧に動作します。

問題は、expandoクリックイベントをキャプチャし、それをグリッド内の特定の「親アイテム行」インデックスに関連付けるための適切な方法を見つけることができなかったことです。

詳細はさておき、ユーザーが展開したすべての行の行インデックスを配列に取得したい(そして、明らかにユーザーが折りたたんだ行のインデックスを削除したい)ので、このTreeGridを破棄し、忠実に再構築できますそれは、ユーザーの選択が適切に展開された状態です。

私はDOJOの初心者ではありませんが、決して専門家ではありません。私はかなりのグーグルとFireBuggingを実行しましたが、これを実行するために使用できるものを実際に見つけることができませんでした。

提案?誰かが以前に似たようなことをしましたか?私が逃した明白な答えを持つ愚かな質問?私は完全に見当違いで、それについてすべて間違っていますか?みんなありがとう!

4

1 に答える 1

0

これに似たものがおそらく機能するでしょう、これはdijit.Tree実装がどのように見えるかです。

var expandedNodes = {}
dijit.tree._onExpandoClick = function (args /* object wrap for args.node */) {
   var treeNode = args.node,
       path = treeNode.getTreePath(),
       id = treeNode.getIdentity();

   expandedNodes[id] = path;

}

厳密に正しいかどうかは100%確信できませんが、TreeGridの場合は、dojox / grid / _TreeView.jsリンク)のコードを確認する必要があります。これ_setOpenは、onclickアクションを「フック」できるエントリポイントになります。そこから、ハッシュを見つけますexpandoCell.openStates。これは、itemIdによってインデックス付けされたtrue/false変数セットです。このハッシュは、州として必要なものである可能性が最も高いです

于 2012-05-28T10:22:29.933 に答える