2009-02-25 15 views
0

私のページにはdijit.layout.AccordionContainerがあり、これはhtmlで定義され、ロード時にdojoがページを解析するときに作成されます。プログラムによるDojoアコーディオンの制御

ユーザーがページとやり取りするときに、私はAjaxを使用してデータを取得し、プログラムでコンテナにデータを挿入します(既存の項目を先に削除します)。ここでは、単に私の問題を説明するために

は動作しないいくつかのコードです:

function doit() { 
     var accordion = dijit.byId("accordionShell"); 
     accordion.getChildren().each(function(item) { 
      accordion.removeChild(item); 
     }); 
     for (i = 1; i < 5; i++) { 
      var d = new dijit.layout.AccordionPane({title:'hello', content:'world'}); 
      accordion.addChild(d); 
     } 
    } 

これが失敗し、アコーディオンの唯一の最初の項目が表示されているので。他の人は実際に存在していると思うけど、見えないので何もできません。

私はでそれを回避するために管理してきました

:常にアコーディオンで1つの項目(私は最初の子を削除することはありません)

  • コールaccordian.layout()変更後がある確保

    1. 内容

    ので、このコードは、限り、あなたは常に最初の項目を見てみたい、と実際に最初のものが、いずれも膨張​​しないよう、「働く」:

    function doit() { 
         var accordion = dijit.byId("accordionShell"); 
         var i = 0; 
         accordion.getChildren().each(function(item) { 
          if (i > 0) accordion.removeChild(item); 
          i++; 
         }); 
         for (i = 1; i < 5; i++) { 
          var d = new dijit.layout.AccordionPane({title:'hello', content:'world'}); 
          accordion.addChild(d); 
         } 
         accordion.layout(); 
    
        } 
    

    Dojo 1.2.0を使用しています - 誰かが間違っていることを知っていますか?

  • 答えて

    0

    私は1つの問題が見つかりました - accordian.removeChild()では不十分です。あなたがそれを破壊するならば、その行動は正しいようです。私はあなたが両方をやらなければならないか、それとも単独で破壊すれば十分か分からない。

    ので、既存の項目を削除するコードは次のようになります。

    accordion.getChildren().each(function(item) { 
         if(i>0) { 
          accordion.removeChild(item); 
          item.destroy(); 
         } 
         i++; 
    }); 
    

    私が最初の項目で「ヘルプ情報」を持つことでこの制限を回避働いている...

    0

    イムが間違えていない場合。 ..あなたはすべきです...

    pane1half = new dijit.layout.ContentPane({id: "pane1half", title: "hello", content: "world"}); 
    

    87 accordion.addChild(pane1half、1);

    +0

    おかげで、これは何も変更しませんでした。それでもアコーディアンに1つのアイテムを残す必要があります。 – prule

    0

    私がやるそして、AccordionPaneの子供を追加し、新しいAccordionContainer以外たびに作成します。

    oldAccordion.domNode.parentNode.replaceChild(
        newAccordion.domNode, 
        oldAccordion.domNode 
    ); 
    
    oldAccordion.destroyRecursive(); 
    newAccordion.startup(); 
    
    関連する問題