Я пытаюсь частично обновить свой элемент управления аккордеоном (из библиотеки расширений). Я пробовал два подхода без успеха.
Проблема 1: Я попытался поместить элемент управления аккордеоном внутрь панели и попытался обновить панель, однако это приводит к ошибке dojo:
"Пытался зарегистрировать виджет с id==view:_id1:myaccordion, но этот id уже зарегистрирован"
Проблема 2: Я попытался напрямую обновить аккордеон по его идентификатору, но затем аккордеон сломался. Я не могу уничтожить управление аккордеоном, как рекомендуется по этой ссылке (http://www.mydominolab.com/2010/07/dijitdialog-inside-partial-refreshing.html), так как у него есть много других проблем, а ссылка конкретно касается управления диалогом, которое сильно отличается от аккордеона.
Не могли бы вы предложить мне что-нибудь? По сути, панель аккордеона здесь отображает количество документов, и я хотел бы своевременно обновить количество документов. Любая помощь будет действительно оценена.
Редактировать 1: просто добавить пример кода для справки (этот код приведет к проблеме 2, упомянутой выше, и если он будет окружен панелью и обновлен идентификатором панели, тогда возникнет проблема 1):
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:button value="Refresh" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="accordion1">
</xp:eventHandler></xp:button>
<xp:br></xp:br>
<xp:br></xp:br>
<xe:accordion id="accordion1">
<xe:this.treeNodes>
<xe:basicContainerNode label="Accordion 1">
<xe:this.children>
<xe:basicLeafNode label="Category x"></xe:basicLeafNode>
</xe:this.children>
</xe:basicContainerNode>
<xe:basicContainerNode label="Accordion 2">
<xe:this.children>
<xe:basicLeafNode label="Category y"></xe:basicLeafNode>
</xe:this.children>
</xe:basicContainerNode>
</xe:this.treeNodes></xe:accordion>
</xp:view>
Редактировать 2: приведенный выше код работает, если вокруг него добавлена панель. Это была моя ошибка, чтобы опубликовать это без тестирования. Тем не менее, я понял, что на самом деле проблема была в макете Dojo, который я пытаюсь использовать для навигации слева. Вот пример кода, который ломает аккордеон.
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xc="http://www.ibm.com/xsp/custom"
pageTitle="S4EP TEAMGROUND"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:button value="Refresh" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="myPanel">
</xp:eventHandler></xp:button>
<xp:div id="body" dojoType="dijit.layout.BorderContainer"
style="height:100%;width:100%;align:center;">
<xp:this.dojoAttributes>
<xp:dojoAttribute name="persist" value="false"></xp:dojoAttribute>
<xp:dojoAttribute name="gutters" value="false"></xp:dojoAttribute>
</xp:this.dojoAttributes>
<xp:div id="left" dojoType="dijit.layout.ContentPane"
style="width:220px;height:50%">
<xp:this.dojoAttributes>
<xp:dojoAttribute name="region" value="left"></xp:dojoAttribute>
<xp:dojoAttribute name="splitter" value="true"></xp:dojoAttribute>
</xp:this.dojoAttributes>
<xp:panel id="myPanel">
<xe:accordion id="accordion1">
<xe:this.treeNodes>
<xe:basicContainerNode label="Accordion 1">
<xe:this.children>
<xe:basicLeafNode label="Category x"></xe:basicLeafNode>
</xe:this.children></xe:basicContainerNode>
<xe:basicContainerNode label="Accordion 2">
<xe:this.children>
<xe:basicLeafNode label="Category y"></xe:basicLeafNode>
</xe:this.children></xe:basicContainerNode>
</xe:this.treeNodes></xe:accordion>
</xp:panel>
</xp:div>
</xp:div>
</xp:view>
dojoForm="true"
в свой XPage, где вы используете аккордеон, он сломается, если вы обновите его частично также в своем рабочем примере.. поэтому он должен что-то делать с загруженными классами или с тем, как они обрабатываются, когда эта опция выбрана. - person Michael Saiz   schedule 06.03.2014