Обновление гобеленовой зоны с динамическим контекстом

StackOverflow https://stackoverflow.com//questions/11705192

  •  13-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь выяснить, как обновить зону гобелена, используя динамический, управляемый клиентом «контекст».Я новичок в гобеленах и пока остановился на версии 5.0.

Основная причина сделать это — повторно использовать другой компонент гобелена в качестве дочернего элемента диалогового окна jquery без необходимости переписывать компонент гобелена.

Одна из проблем заключается в том, что зона и любые элементы, управляющие ею, оказываются внутри диалогового окна jquery.$jquery(...).dailog() имеет тенденцию вырезать/вставлять HTML-код элемента в другое место, что может что-то нарушать.Однако мне не удалось заставить все работать даже за пределами диалогового окна jquery.

Вот что я пробовал, но это не сработало (возможно, я сделал это неправильно):

  • Создайте ссылку на событие, привязанную к зоне, и измените href.Гобелен, похоже, вместо этого использует переменную, хранящуюся где-то. вздох.
  • Создайте форму t:form, привязанную к зоне.Когда я пытаюсь обновить его, я могу сказать, что происходит событие на стороне сервера, но зона гобелена не изменяется и не обновляется должным образом.Зона расположена снаружи и отделена от формы.Я даже не вижу типичной желтой вспышки при обновлении зоны.
Это было полезно?

Решение

Я нашел пример кода, который в значительной степени решает мою проблему;это не сработало, но когда я набрал вопрос здесь, на SO, я увидел, что не так.Поскольку вполне вероятно, что кто-то другой тоже столкнулся с этой проблемой, я публикую ответ здесь:

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

Чтобы решить проблему с перемещением html jquery .dialog(), мне также нужно скопировать и сохранить диспетчер зон следующим образом:(где $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