2015-11-05 3 views
2

В приложении у меня есть элемент управления повторением, и для каждой записи в повторе я отлично соответствуюю модальному бутстрапу.Загрузить bootstrap modal в xpages

Я хотел бы открыть определенный модальный способ, когда пользователь откроет xpage с предоставленным url, включая хеш-значение. Хэш-значение соответствует идентификатору модального, например. #view: _id1: _id152: objRepeatList: 1: _id193: _id200: bootstrapModal

Однако я заметил, что команда $ ('# вид: _id1: _id152: objRepeatList: 1: _id193: _id200: bootstrapModal'). модальным ('показать'); не дает никакого результата.

Для того, чтобы проверить функцию шоу() Я сделал простой тестовый скрипт, который получает первый компонент модальный в DOM и пытается открыть его:

$(document).ready(function() {  
    var cardType= '#{javascript:SSApp.getCurrentObjectCollectionCardType()}';  
    if (cardType=="cardPicture"){ 
     var modals = $(".modal"); 
     alert(modals.length);  
     if (modals.length > 0){ 
      var firstModal = modals.first(); 
      alert("we got one"); 
      var firstModalId = "#" + firstModal.attr('id'); 
      alert(firstModal.attr('id'));    
      $(firstModalId).modal('show'); 
     }  
    } 
}); 

я получаю все сигналы, кроме последней команды строка всегда дает нулевой результат.

Поскольку XPage работает с частичным обновлением Я также попытался OnComplete события для EventHandler, который обновляет страницу, но это, кажется, много кэширования, то происходит вокруг, а иногда cardType хранится в памяти как-то:

<xp:eventHandler event="onclick" submit="true" 
          refreshMode="partial" refreshId="row-body"> 
          <xp:this.action> 
           <![CDATA[#{javascript:sessionScope.put("collDisplay","cards"); 
SSApp.currentObject.loadRelations(relation.category);}]]> 
          </xp:this.action> 
          <xp:this.onComplete><![CDATA[var cardType= '#{javascript:SSApp.getCurrentObjectCollectionCardType()}'; 

    if (cardType=="cardPicture"){ 


     var modals = $(".modal"); 
     alert(modals.length); 

     if (modals.length > 0){ 
      var firstModal = modals.first(); 
      alert("we got one"); 
      var firstModalId = "#" + firstModal.attr('id'); 
      alert(firstModal.attr('id')); 

      $(firstModalId).modal('show'); 
     } 

    }]]></xp:this.onComplete> 
         </xp:eventHandler> 

Кто-нибудь знает, что я должен делать правильно?

+0

Два вопроса: 1) Вы пытались запустить модель с помощью консоли браузера с тем же или другим результатом. 2) Пробовали ли вы использовать полное обновление, и тогда оно работает? (Очевидно, что это нежелательно, но может быть необходимо) –

ответ

3

Проблема в том, что jQuery не может найти диалог из-за «:» в id. Их нужно избегать. Вот небольшая функция, которую вы можете использовать вместо $, когда вам нужно получить идентификаторы XPages (кредит для Mark Roden для этого).

function x$(id){ 
    id = id.replace(/:/gi, "\\:"); 
    return ($("#" + id)); 
} 

Используйте эту функцию вместо $(), когда вам нужен элемент XPages.

x$("view:_id1:_id152:objRepeatList:1:_id193:_id200:bootstrapModal").modal('show'); 
Смежные вопросы