سؤال

أحاول معرفة كيفية تحديث منطقة نسيج باستخدام "سياق" ديناميكي يحركه العميل.أنا جديد إلى حد ما في مجال النسيج، وأنا عالق مع 5.0 في الوقت الحالي.

السبب الرئيسي للقيام بذلك هو إعادة استخدام مكون نسيج آخر باعتباره تابعًا لمربع حوار jquery، دون الحاجة إلى إعادة كتابة مكون النسيج.

إحدى العوائق هي أن المنطقة وأي عناصر تتحكم فيها ينتهي بها الأمر داخل مربع حوار jquery.يميل $jquery(...).dailog() إلى قص/لصق HTML الخاص بالعنصر في موقع آخر، مما قد يؤدي إلى تعطيل شيء ما.ومع ذلك، لم أتمكن من تشغيل الأشياء حتى خارج مربع حوار jquery.

إليك ما جربته، والذي يبدو أنه لم ينجح (ربما فعلته بشكل خاطئ):

  • قم بإنشاء رابط حدث مرتبط بالمنطقة، وقم بتعديل href.يبدو أن Tapestry يستخدم متغيرًا مخزنًا في مكان ما بدلاً من ذلك تنهد.
  • قم بإنشاء نموذج t: منضم إلى المنطقة.عندما أحاول تحديثه، يمكنني معرفة حدوث حدث من جانب الخادم، لكن منطقة النسيج لا تتغير أو يتم تحديثها كما ينبغي.تقع المنطقة بالخارج ومنفصلة عن النموذج.لا أرى حتى الفلاش الأصفر النموذجي عند تحديث المنطقة.
هل كانت مفيدة؟

المحلول

لقد وجدت بعض الأمثلة على التعليمات البرمجية التي تحل مشكلتي إلى حد كبير؛لم يكن يعمل، ولكن عندما كتبت السؤال هنا في SO، رأيت ما هو الخطأ.نظرًا لأنه من المحتمل أن يكون شخص آخر قد واجه هذه المشكلة أيضًا، فإنني أنشر إجابة هنا:

        var zoneId = "itemZone"; // tml was <t:zone id="itemZone"...>
        var zoneObject = Tapestry.findZoneManagerForZone(zoneId);
        zoneObject.updateFromURL(url);

لحل مشكلة نقل jquery .dialog() لـ html، يجب علي أيضًا نسخ مدير المنطقة والحفاظ عليه كما يلي:(حيث $J(...) هو الاختصار الخاص بي لـ jquery، لتجنب تعارض النموذج الأولي)

    prototypeStorageObj = $T("itemZone");
    zoneManager = prototypeStorageObj.zoneManager;
    // jquery stuff that kills the prototype data storage.
    emailForm = $J("#myDialog");
    emailForm.dialog({ autoOpen: false, modal:true });
    emailForm.dialog('open');
    // restore the zone manager so the zone works again:
    $T("itemZone").zoneManager = zoneManager;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top