子窗口小部件不会在Dojo中呈现(将具有0高度)

时间:2012-11-30 09:33:00

标签: widget dojo

看看这个简单的小提琴:

http://jsfiddle.net/mercmobily/y4uG2/10/

基本上我声明了一个Widget,并开始添加子窗口小部件。有一次,我有子窗口小部件“部分”,它是一个带有标签容器和子标签的模板化小部件。

主要小部件有:

'<div data-dojo-type="Section" data-dojo-props="title: \'Sub Widget\'" data-dojo-attach-point="section"></div>' +

那个“部分”小部件有:

  templateString: '' +
    '  <div>' +

    '    <div class="subWidget" data-dojo-type="dijit.layout.TabContainer" tabPosition: \'left-h\'" dojo-attach-point="tabCont" >' +

      '      <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="title: \'Second Widget one\'">Second Widget One</div>' +
      '      <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="title: \'Second Widget Two\'">Section Widget Two</div>' +

      '    </div>'+
    '    </div>'

现在,我正在努力获取子窗口小部件“section”,以便正确呈现。 在我的实际节目中,我现在玩了:

  1. doTemplate
  2. CSS中的height属性
  3. 从主窗口小部件中捕获resize()并在子窗口小部件中调用resize()
  4. (关于第(3)点,我必须做类似的事情:

    resize:function(){         this.inherited(参数);         console.log(“调用主窗口小部件中的调整大小!”);         this.settingsTab.resize();   }

    此时,我疯了,因此问题是:什么是接受正常常见方式以确保,在小提琴中,当你实例化主要的小部件时会渲染子小部件吗?

    PLUS,我是否需要指定高度:我使用过的每个标签容器都是100%? (它看起来像)

    谢谢!

    更新

    我更新了小提琴。此时我在标签容器中添加了“高度”。在那之后,浏览器窗口的实际操作确实可以解决问题(!)。我不太清楚为什么我需要那个高度,但是好的。

    http://jsfiddle.net/mercmobily/y4uG2/16/

    当用户点击“损坏的”小部件时,我也做了一个on(),并且 - 猜猜是什么 - 运行resize并且渲染得很好。

    这更没意义。为什么我自己的小部件与模板中定义的小部件有什么不同?我开始了各种各样的理论:高度无法计算,因为它没有显示,例如。但是,SAME应该应用于带有子标签的其他标签,左侧标记为“复杂”!

    我没有想法。不,真的。

2 个答案:

答案 0 :(得分:4)

确实有一个拼写错误,正如Frode所说,但如果您希望标签内容显示在SubWidget中,您仍需要点击其中一个标签。

我建议您更正拼写错误并使您的窗口小部件ContentPane而不是_WidgetBase来解决此问题,因为ContentPane知道如何调整自身大小,如下所示:

declare('SubWidget', [ContentPane, _TemplatedMixin, _WidgetsInTemplateMixin], {

      templateString: ''...

请参阅http://jsfiddle.net/psoares/YwWst/

顺便说一句,没有必要在1.8中指定widgetsInTemplate : true。添加_WidgetsInTemplateMixin就足够了......

答案 1 :(得分:0)

SubWidget中的templateString有拼写错误。可能只是那样吗?

...<div style="height:100%" data-dojo-type="dijit.layout.TabContainer" tabPosition: \'left-h\'" data-dojo-attach-point="tabContainer" >'...

应该是:

<div style="height:100%" data-dojo-type="dijit.layout.TabContainer" data-dojo-props="tabPosition: \'left-h\'" data-dojo-attach-point="tabContainer" >'

这似乎是你小提琴中的伎俩:http://jsfiddle.net/y4uG2/18/