Как скрыть пункт меню с тегом <li>в XPages - PullRequest
2 голосов
/ 09 февраля 2012

У меня есть традиционное меню, основанное на этом соглашении

<ul>
<li><xp:link>menu link 1</xp:menulink></li>
<li><xp:menulink>menu link 2</xp:menulink></li>
</ul>

Я хочу выборочно визуализировать ссылку меню 2, основываясь на некоторой логике. Я могу отрендерить <xp:link> нормально, но, поскольку <li> является тегом HTML, а не тегом XPages, управление рендерингом невозможно.

Я заметил, что есть свойство tagName для <xp:text>, но не для <xp:link>. см .: http://xpagesblog.com/XPagesHome.nsf/Entry.xsp?documentId=4EB7314545EE0C19852578CB0066CE4C

Какой самый простой способ справиться с этим без использования повторов и т. Д.?

Ответы [ 5 ]

7 голосов
/ 09 февраля 2012

Вы также можете обернуть весь тег <li>...</li> в тег <xp:panel>, на котором есть обработанный скрипт.Не указывайте на панели xp: ID и дополнительный код не отправляется в браузер.

Если вы используете Extlib или UP1, вы также можете использовать тег <xe:listcontainer>.Он отображает каждую прямую дочернюю запись как элемент списка, так что в итоге вы получите код, подобный ..

<xe:listcontainer>
  <xp:link> ... </xp:link>
  <xp:link rendered="renderscript"> ... </xp:link>
  <xp:link> ... </xp:link>
</xe:listcontainer>

В этом случае вам не нужно добавлять теги <ul> или <li>в коде ExtLib позаботится об этом за вас.

5 голосов
/ 09 февраля 2012

Вместо тега LI используйте панель и установите для tagName значение "li" (новое с 8.5.3):

<ul>
    <li>
        <xp:link>menu link 1</xp:link>
    </li>
    <xp:panel
        rendered="#{test == true}"
        tagName="li">
        <xp:link>menu link 2</xp:link>
    </xp:panel>
</ul>
3 голосов
/ 09 февраля 2012

В прошлом я использовал xp: span, и он работал нормально.

    <xp:span>
       <xp:this.rendered><![CDATA[#{javascript:document1.isEditable()}]]></xp:this.rendered>
       <li>YOUR TEXT HERE</li>
    </xp:span>
1 голос
/ 09 февраля 2012

Это работает:

<ul>
    <li>Static item 1</li>
    <xp:text escape="false" id="computedField1" tagName="li" rendered="false">
        <xp:this.value><![CDATA[#{javascript:'<a href="http://XPages.info">menu link 2</a>'}]]></xp:this.value>
    </xp:text>
    <li>Static item 3</li>
</ul>

Конечно, вы можете вычислить визуализированный тег на xp: text.

0 голосов
/ 09 февраля 2012

Если вы не беспокоитесь о том, показывает ли код код, вы всегда можете просто систематически изменить класс li с помощью ssjs

<ul>
<li class="#{javascript:return myclassname;}"><xp:link>menu link 1</xp:menulink></li>
<li><xp:menulink>menu link 2</xp:menulink></li>
</ul>
...