سؤال

لدي مكون XBL يقوم بإنشاء عنصر تحكم في مربع الاختيار في JavaScript. يتم تعيين القيمة في JavaScript أثناء تهيئة المكون. يعمل المكون بشكل جيد عند عدم استخدامه داخل التكرار ولكن من الداخل تكرر عندما أحاول نقل الصفوف لأعلى أو لأسفل XBL التحكم في الحالة.

يتم إطلاق الحدث XXForms-Eneration على الصف الذي يتم نقله ولكنه لا يطلق النار على الصف الذي يغير الموضع أثناء هذه الخطوة. على سبيل المثال ، إذا قمت بنقل الصف 3 إلى الصف 2 ، فسيتم إطلاق XXForms-Eneration-Aderived على الصف 3 ولكني أرغب في إعادة تهيئة المكونات في الصف 2 بالإضافة إلى حفظ ولايتي في JavaScript.

أعتقد أنه ينبغي إطلاق XXForms-Eneration-ederation على كلا الصفوف الذي غير الموقف؟ هذا هو حقا مبادلة تنطوي على كلا الصفين. الرجاء التعليق.

تحرير: أنا أستخدم عداء Orbeon Form

هل كانت مفيدة؟

المحلول

إلى أي مكونات xxforms-iteration-moved يتم إرساله هو مسألة كيف xxforms-iteration-moved ويعرف. في الوقت الحالي ، يتم إرسالها إلى الضوابط داخل التكرارات التي تحركت. ما قد تحتاجه هو التعامل مع xforms-enabled الحدث ، بالإضافة إلى xxforms-iteration-moved. ضع في اعتبارك المثال التالي: تبدأ بقائمة مع "A ، C ، D". إذا قمت بإدراج "B" بعد "A" ، فإن "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 مكون.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top