2010-11-02 55 views
4

我有一個XBL組件,它在javascript中創建一個複選框控件。在組件初始化期間,在javascript中設置值。當我嘗試向上或向下移動行時XBL控件不會改變狀態,但組件在內部重複使用時效果不錯。在xxforms-iteration-moved上重新初始化XBL組件

xxforms-iteration-moved事件在被移動的行上被觸發,但在該移動過程中不會觸發改變位置的行。例如,如果我將第3行移動到第2行,則在第3行觸發xxforms-iteration-moved,但我想重新初始化第2行中的組件,並且我的狀態將保存在javascript中。

我認爲xxforms-iteration-moved應該在兩個行上發生改變位置?這實際上是涉及兩行的交換。請給出意見。

編輯:我使用Orbeon形式亞軍

+0

您正在運行哪個XForms處理器? – 2010-11-02 09:48:08

回答

1

要什麼xxforms-iteration-moved被分派組件是xxforms-iteration-moved是如何定義的問題。現在,它被分派到移動迭代中的控件。除xxforms-iteration-moved之外,您可能需要的是處理xforms-enabled事件。考慮下面的例子:你從一個帶有「a,c,d」的列表開始。如果在「a」之後插入「b」,則新的「b」將得到xforms-enabled,「c,d」每個都會得到xxforms-iteration-moved。因此,通過對這兩個事件作出反應,您應該能夠根據需要(重新)初始化組件。

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml" 
     xmlns:xforms="http://www.w3.org/2002/xforms" 
     xmlns:xxforms="http://orbeon.org/oxf/xml/xforms" 
     xmlns:ev="http://www.w3.org/2001/xml-events" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:fr="http://orbeon.org/oxf/xml/form-runner"> 
    <xhtml:head> 
     <xhtml:title>Iteration moved</xhtml:title> 
     <xforms:model> 
      <xforms:instance> 
       <instance> 
        <letter>a</letter> 
        <letter>c</letter> 
        <letter>d</letter> 
        <letter>e</letter> 
       </instance> 
      </xforms:instance> 
     </xforms:model> 
    </xhtml:head> 
    <xhtml:body> 
     <fr:button> 
      <xforms:label>Insert b</xforms:label> 
      <xforms:insert ev:event="DOMActivate" nodeset="letter" at="1" position="after" origin="xxforms:element('letter', 'b')"/> 
     </fr:button> 
     <fr:button> 
      <xforms:label>Delete c</xforms:label> 
      <xforms:delete ev:event="DOMActivate" nodeset="letter[. = 'c']"/> 
     </fr:button> 
     <xforms:repeat id="letter-repeat" nodeset="letter"> 
      <xforms:output id="letter" value="."> 
       <xforms:message ev:event="xxforms-iteration-moved" level="modal" value="concat('xxforms-iteration-moved : ', .)"/> 
       <xforms:message ev:event="xforms-enabled" level="modal" value="concat('xforms-enabled : ', .)"/> 
      </xforms:output> 
     </xforms:repeat> 
    </xhtml:body> 
</xhtml:html> 

我要補充一點,如果你希望在重複使用的組件(早晚各組分的),現在,因爲重複的客戶端是如何工作的,如果你正在做一些在xforms-enabled上工作初始化組件,您很可能還需要在xxforms-iteration-moved上執行該操作。例如,請參閱fr:button組件中的how this is done

+0

同意Alex。這是我在RTE xbl控件中的。 \t \t \t \t \t \t \t \t \t \t \t \t \t YAHOO.xbl.fr.RTE.instance(本)的.init(); \t \t \t \t 您說:「現在,它被分派到移動迭代中的控件。」因此,當第3次迭代移至第2次迭代時,將xxforms-iteration-moved事件分派給第3次迭代中的RTE控制。它沒有派發到第二次​​迭代。我的印象是xxforms-iteration-moved會被調度到兩個迭代中。 – BinnyG 2010-11-03 18:02:53

+0

BinnyG,第三次迭代如何成爲第二次迭代?是第一次還是第二次刪除? – avernet 2010-11-03 18:31:45

+1

BinnyG,添加到我以前的評論,如果你刪除第二個,第三個成爲第二個,現在第二個應該接收一個'xxforms-iteration-moved'事件。要確認這一點,運行上面的代碼(我添加了一個「刪除c」按鈕),點擊該按鈕:你將從「a,c,d,e」到「a,d,e」;那時「d」和「e」接收到「xxforms-iteration-moved」事件。 – avernet 2010-11-03 22:33:45