2012-06-15 20 views
1

我正在使用Xpages擴展庫附帶的手風琴控件構建自定義控件。我試圖綁定到AccordianPane ID和我收到的錯誤:嘗試動態綁定到手風琴擴展庫控件中的編號

屬性id的值不能運行時綁定

錯誤指的是這行代碼:

<xe:djAccordionPane 
       title="#{javascript:sectiontitles.getColumnValue('Section')}" id="#{javascript:sectiontitles.getColumnValue('Section')}" 
       parseOnLoad="false"> 

我看到保羅威瑟斯張貼在這裏:

http://www.intec.co.uk/combining-and-an-alternative-approach/ 這使我認爲這是可能的,我只是不太有。我在哪裏使用$而不是#?

這裏是我使用的代碼:

<?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:this.data> 
     <xp:dominoView var="view1" viewName="MenuLinks"></xp:dominoView> 
     <xp:dominoView var="view2" viewName="MenuLinksSections"></xp:dominoView> 
    </xp:this.data> 

    <xp:panel 
     style="float:left;padding-left:20.0px;padding-right:20.0px; padding-top:20.0px"> 



     <xe:djAccordionContainer id="djBorderContainer1" 
      style="width:200px; height:540px" styleClass="soria"> 
      <xe:this.selectedTab><![CDATA[#{javascript:var selectedTab = context.getUrlParameter("tab"); 
if (selectedTab == "") { 
"" 
} else { 
selectedTab 
} 
}]]></xe:this.selectedTab> 

      <xp:repeat id="repeat1" rows="30" var="sectiontitles" 
       value="#{view2}" disableOutputTag="true"> 

       <xe:djAccordionPane 
        title="#{javascript:sectiontitles.getColumnValue('Section')}" **id="#{javascript:sectiontitles.getColumnValue('Section')}"** 
        parseOnLoad="false"> 


        <xp:text escape="true" id="computedField1"> 
         <xp:this.value><![CDATA[#{javascript:var id = "#{id:djAccordionPane}"; 
id}]]></xp:this.value> 
        </xp:text> 
        <xp:text escape="true" id="computedField2"></xp:text> 
        <xp:repeat id="repeat2" rows="30" var="menulinks" 
         disableTheme="true"> 
         <xp:this.value><![CDATA[#{javascript:var tview = database.getView("MenuLinks"); 
var v = sectiontitles.getColumnValue("unid"); 
var vc:NotesViewEntryCollection = null; 
if (v != null) { 

    vc = tview.getAllEntriesByKey(v); 
} 
vc 
}]]></xp:this.value> 

         <xp:text escape="false"> 
          <xp:this.value><![CDATA[#{javascript:menulinks.getColumnValues()[3]}]]></xp:this.value> 
         </xp:text> 

        </xp:repeat> 
       </xe:djAccordionPane> 
      </xp:repeat> 

     </xe:djAccordionContainer> 
    </xp:panel> 


</xp:view> 

任何幫助表示讚賞。

感謝,

利亞Lapson

回答

2

這是幾乎可以肯定的id屬性不能是運行時綁定。這是因爲服務器使用該ID來創建XPage上元素的映射。所以它不能用#來動態計算。

除非repeatContents屬性設置爲true,否則您將無法在重複內使用$。 $意味着它會嘗試在頁面加載時計算ID,但是重複中的元素數量還不會被計算。他們將被動態計算。所以你需要重複repeatContents =「true」,所以重複控件的內容在頁面加載時計算。 repeatControls屬性可能會對分頁等事情產生連鎖反應,但聽起來這不會對您造成問題。

但是,爲什麼你要計算ID?是否可以在CSJS的某處使用ID來獲取每個單獨元素的句柄?如果是這樣,另一種方法可能是在djAccordionPane中添加一個正常的HTML元素(如div)並計算其ID。你將不會遇到運行時綁定問題。或者計算styleClass屬性。然後,您可以使用dojo.query根據類屬性選擇元素。您應該可以使用dojo.query(。#{javascript:sectiontitles.getColumnValue('Section')})來獲取與匹配sectiontitles.getColumnValue('Section')的元素的句柄。

+0

爲什麼我想綁定到ID?好問題。該控件允許最終用戶「控制」手風琴窗格中的標題和鏈接。基本上有兩個視圖,一個用於部分標題,另一個用於部分內的鏈接標題和網址。控件中的重複項綁定到「列表」視圖部分,然後根據部分標題推斷鏈接。我想要一個Accordian Pane ID數組的原因是爲一個手風琴窗格設置selectedTab屬性(相應的窗格/部分將保持展開狀態)。 –

+0

我目前正在通過將&tab =附加到URL結尾並解析它並將它傳遞迴選定的選項卡來執行此操作<![CDATA [#{javascript:var selectedTab = context.getUrlParameter(「標籤」); 如果(selectedTab == 「」){ 「」 }否則{ selectedTab } }]]>如果我硬編碼手風琴窗格ID這個工作原理,但我想使它動態。 –

+0

對不起,我還沒有在重複控件中看到repeatContents =「true」屬性。我確實看到repeatControls =「true」 –