2015-02-03 3 views
1

У меня есть повторный контроль над отображением позиции XPage. Чтобы просмотреть другие данные, пользователь нажимает кнопку (внутри повтора), которая будет устанавливать переменную viewScope в rowIndex повтора, а затем открывает модальное отображение отображаемых деталей детали.XPages повторное управление и кнопка

Я не могу установить переменную viewScope с помощью кнопки. Это похоже на то, что он не может получить дескриптор rowIndex.

У меня есть вычисленное текстовое поле, установленное для отображения rowIndex в начале повтора (что отлично работает).

Мне явно не хватает чего-то элементарного. Любая помощь будет оценена.

Соответствующий исходный код следующим образом:

<xp:repeat id="repeat1" rows="50" var="entry" indexVar="rowIndex"> 
<xp:this.value><![CDATA[#{javascript:var m = sessionScope.assetMap; 
if(m!=null){ 
m.entrySet() 
}}]]></xp:this.value> 
<div> 
    <small>     
    <label> 
    <xp:text escape="true" id="num"> 
    <xp:this.value><![CDATA[#{javascript:var itemNum:Number =  parseInt(rowIndex + 1); 
itemNum.toPrecision(0);}]]></xp:this.value> 
    </xp:text> 
    .&#160; Description:&#160; &#160; 
    </label> 
    <xp:text escape="true" id="desc"> 
    <xp:this.value><![CDATA[#{javascript:@Word(entry.getValue(),"~",3);}]]> </xp:this.value> 
    </xp:text> 
    </small> 
</div> 
<br></br> 
<div> 
<xp:button type="button" value="Details ..." id="button2"> 
<xp:eventHandler event="onclick" submit="true" refreshMode="complete"> 
<xp:this.action><![CDATA[#{javascript:try{var itemNum:Number =  parseInt(rowIndex + 1); 
viewScope.currentItem = itemNum.toPrecision(0); 
}catch(e) { 
requestScope.errstatus = e.toString();}}]]></xp:this.action> 
</xp:eventHandler> 
</xp:button> 

02/04/2015 Обновление:

Я изолировали проблему к предоставленному свойству таможенного контроля. Код работает, если я не использую свойство rendered.

Код в onCLientLoad моего XPage (CSJS) является:

$(window).on('load resize', function(){ 
var screenWidth = $(window).width(); 
var sDevice = ''; 

switch(true){ 
    case (screenWidth < 768): 
     sDevice = 'mobile'; 
     break; 
    case (screenWidth < 922): 
     sDevice = 'tablet'; 
     break; 
    case (screenWidth >= 922): 
     sDevice = 'desktop' 
} 

XSP.partialRefreshPost('#{id:pnlList}', {params: {'sDevice': sDevice}}); 

});

И источник для моего пользовательского элемента управления в XPage с оказанной собственности:

<xp:panel rendered="#{javascript:param.sDevice == 'mobile'}"> 
     <xc:ccSYS_AppLayoutReq_p xp:key="panelContentFacet"> 
      <xp:this.facets> 
       <xc:cc_cartracking_p xp:key="contentFacet"></xc:cc_cartracking_p> 
      </xp:this.facets> 
     </xc:ccSYS_AppLayoutReq_p> 
     </xp:panel> 

Спасибо,

Dan

+0

Дэн, возможно, попробуйте изменить уаг itemNum: Int вместо номера. Или попробуйте полностью удалить этот тип. Также, если вы переносите права на код в выражениях print(), вы получаете ожидаемые значения в журнале? –

+0

Спасибо Стив. Я не думаю, что это связано с itemNum: Number, потому что это используется в вычисленном поле и прекрасно работает. Кроме того, моя попытка catch не создает никаких ошибок. –

+1

Каков результат печати (parseInt (rowIndex + 1)) и print (itemNum) и print (itemNum.toPrecision (0)). Я думаю, что один из них является нулевым или неожиданным результатом, который может дать вам понять, где он терпит неудачу. –

ответ

2

Вы должны установить опцию «Установить режим частичного исполнения» execMode="partial" в вашей кнопке.

Посмотрите на весь ответ на вопрос вашего коллеги https://stackoverflow.com/a/28330481/2065611

+0

Вот и все! Большое спасибо, что потратили время, помогая нам. –

Смежные вопросы