2012-04-27 9 views
0

コンテンツ・ペインへの「遷移」を防止するカスタムDojoウィジェットを作成しようとしています。私はスライディングの代わりにペインリンクを別のページに持っています。ContentPaneを展開しないオプションのカスタムDojo Accordion Containerウィジェット

<div id="menu"> 

<div dojoType="AccordionMenu" doLayout="true" class="tundra" style="height: 300px"> 

<div dojoType="AccordionPane" doExpand="false" title="<p>Home</p>"></div> 

<div dojoType="AccordionPane" selected="true" title="<p>Tasks 1</p>"> 
<ul class="nav"> 
    <li><a href="#">Task 1</a></li> 
    <li><a href="#">Task 2</a></li> 
    <li><a href="#">Task 3</a></li> 
</ul>      
</div> 

<div dojoType="AccordionPane" title="<p>Tasks 2</p>"> 
<ul class="nav"> 
    <li><a href="#">Task 1</a></li> 
    <li><a href="#">Task 2</a></li> 
    <li><a href="#">Task 3</a></li> 
</ul>      
</div>  

</div> 

</div> 

私は私のカスタムウィジェットそうのようなセットアップを持っている:

私はdoExpand =「false」の例属性を使用してこのオプションを指定します。これは、やや作品

<script> 

dojo.require("dojo.parser"); 
dojo.require("dijit.Menu"); 
dojo.require("dijit.MenuSeparator"); 
dojo.require("dijit.MenuItem"); 
dojo.require("dijit.PopupMenuItem"); 
dojo.require("dijit.layout.AccordionContainer");  

dojo.ready(function(){ 

console.log('AccordionMenu loading'); 

dojo.declare("AccordionMenu", 
    [dijit.layout.AccordionContainer], 
    { 
     postMixInProperties: function(){ 
     console.log('AccordionMenu postMixInProperties'); 
     }, 

     _transition: function(/*dijit._Widget?*/ newWidget, /*dijit._Widget?*/ oldWidget, /*Boolean*/ animate){ 
     if (newWidget.doExpand == true){ 
      this.inherited(arguments); 
     }; 

     } 


    }); 

console.log('AccordionPane loading done'); 

dojo.declare("AccordionPane", 
    [dijit.layout.ContentPane], 
    { 
     doExpand: true, 

     postMixInProperties: function(){ 
     console.log('AccordionPane postMixInProperties'); 
     } 

    }); 

console.log('AccordionPane loading done');  

});  

dojo.addOnLoad(function(){ 
console.log('parse menu'); 
dojo.parser.parse("menu"); 
}); 


</script> 

それが、ときに私が別のContentPaneをクリックすると、前のコンテンツペインが折りたたまれません。おそらくこれを行うためのより良い方法があります。ここで

が実際の例である - http://jsfiddle.net/qPqhK/15/

答えて

1

さて、私は答えを見つけた - 私は戻ってdijit.layout.StackContainerでさらにselectChildメソッドをオーバーライドする必要がありました。 _transitionメソッドでoldWidget/newWidget変数が順不同になっていました。

selectChild: function(page){ 
      console.log(page); 

      if (page.doExpand == true){ 
       console.log('true') 
       this.inherited(arguments) 
      }; 


     }  

http://jsfiddle.net/KvXmR/1/