Xpages Dynamic Dojo диалоговое управление - PullRequest
1 голос
/ 13 марта 2012

У меня есть список продуктов (созданный с использованием повторяющегося элемента управления), и я хочу нажать на конкретный продукт и вызвать диалоговое окно с дополнительной информацией об этом конкретном продукте.На самом деле я не хочу создавать файл dijit.dialog для каждого продукта на этой странице, поэтому как я могу сделать это динамически, возможно, используя AJAX и частичное обновление.

Подобный пример не xpages можно увидеть здесь:http://www.replacementkeys.co.uk/window?dir=asc&limit=12&mode=grid&order=position - когда вы наводите курсор на изображение и появляется кнопка быстрого просмотра, которая затем динамически загружает контент для этого продукта.

Любые идеи будут по-настоящему оценены.

Ответы [ 2 ]

4 голосов
/ 14 марта 2012

Мы строим диалог вне элемента управления повтором, а затем действие, которое запускает или показывает его, также устанавливает переменную viewScope, которая используется UNID для источника данных в диалоговом окне. Просто убедитесь, что вы обновляете содержимое диалогового окна при его открытии ...

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:this.data>
    <xp:dominoView var="promptView" viewName="dlgBoxes">
    </xp:dominoView>
</xp:this.data>
<xp:panel>
    <xp:repeat id="repeat1" rows="30" value="#{promptView}" var="promptEntry">
        <xp:panel tagName="div">
            <xp:text escape="true" id="computedField1" value="#{promptEntry.dlgName}">
            </xp:text>
            &#160;
            <xp:button value="details" id="button1">
                <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
                    <xp:this.action><![CDATA[#{javascript:
                        var pe:NotesViewEntry = promptEntry;
                        viewScope.put("dlgDocUnid", pe.getUniversalID());
                        getComponent("dialog1").show();
                    }]]></xp:this.action>
                </xp:eventHandler>
            </xp:button>
        </xp:panel>
    </xp:repeat>
</xp:panel>

<xe:dialog id="dialog1" keepComponents="false" partialRefresh="true">
    <xe:this.title><![CDATA[#{javascript:
        var unid = viewScope.get("dlgDocUnid");
        if(!unid) return "";
        var doc:NotesDocument = database.getDocumentByUNID(unid);
    return doc.getItemValueString("dlgName");}]]></xe:this.title>
    <xp:panel>
        <xp:this.data>
            <xp:dominoDocument var="dlgDoc" formName="dlgBox" action="openDocument">
                <xp:this.documentId><![CDATA[#{javascript:viewScope.get("dlgDocUnid");}]]></xp:this.documentId>
            </xp:dominoDocument>
        </xp:this.data>
        <xp:text escape="true" id="computedField2" value="#{dlgDoc.Title}">
        </xp:text>
        <xp:br></xp:br>
        <xp:br></xp:br>
        <xp:text escape="true" id="computedField3" value="#{dlgDoc.dlg}">
        </xp:text>
    </xp:panel>
</xe:dialog>
</xp:view>

Счастливое кодирование

/ Newbs

2 голосов
/ 13 марта 2012

Вы можете комбинировать свой повторный элемент управления с диалоговым элементом управления библиотеки расширений, чтобы иметь возможность запускать диалоговое окно, когда пользователь нажимает на отдельную строку.Крис Тухи создал отличную статью под названием Всплывающие диалоговые формы из представлений в XPages , которая демонстрирует это.

...