dojo 1.10.4 dijit/layout/Tabcontainer не отображает содержимое первой области содержимого

dojo 1.10.4, sitemesh 2.4.2

Я пытаюсь использовать dojo 1.10.4 в моем проекте для работы с sitemesh 2.4.2, Spring Framework 4.1.

Когда я пытаюсь поместить tabcontainer в мой раздел контента (заголовок, контент и стиль нижнего колонтитула, определенные sitemesh). Я никогда не получаю содержимое первой панели содержимого моего tabcontainer, оно всегда исчезает. тестовый код как:

<div style="width: 350px; height: 300px">
  <div data-dojo-type="dijit/layout/TabContainer" style="width: 100%; height: 100%;">
    <div data-dojo-type="dijit/layout/ContentPane" title="My first tab" data-dojo-props="selected:true">
      Lorem ipsum and all around...
    </div>
    <div data-dojo-type="dijit/layout/ContentPane" title="My second tab">
      Lorem ipsum and all around - second...
    </div>
    <div data-dojo-type="dijit/layout/ContentPane" title="My last tab" data-dojo-props="closable:true">
      Lorem ipsum and all around - last...
    </div>
  </div>
</div>

JavaScript как:

<script type="text/javascript">
  require(["dojo/parser", "dojo/aspect", "dijit/layout/TabContainer", "dijit/layout/ContentPane","dojo/domReady!"], function(parser, aspect) {
    parser.parse();
  });
</script>

Результат как:

содержимое первой панели содержимого dojo потеряно в tabcontainer

другие области содержимого с вкладками отображаются правильно.

Eidt

Это очень забавная проблема, она была вызвана JavaScript; Я изменил JavaScript на:

<script type="text/javascript">
  require(["dojo/parser", "dijit/layout/TabContainer", "dijit/layout/ContentPane"]);
</script>

Тогда все работает нормально.

1 ответ

Решение

Эта проблема появляется, когда вы уже проанализировали TabContainer и вы пытаетесь разобрать его снова. То, что происходит, - то, что новый виджет не может быть создан, потому что он уже существует, и поэтому ваша первая вкладка не будет работать правильно.

Если вы откроете консоль браузера (обычно F12), вы даже увидите ошибку:

dojo/parser::parse() error Error: Tried to register widget with id==dijit_layout_ContentPane_0 but that id is already registered

Чтобы исправить это, вы должны попытаться найти другие parser.parse() операторы, или, возможно, вы уже анализируете DOM при загрузке (используя parseOnLoad: true) если это так, вам не нужно делать дополнительный анализ.

Другие вопросы по тегам