Динамическое добавление элемента с поддержкой Dojo в Zend

Я пишу форму, используя Zend_Dojo_Form.

Все идет нормально, если только я не динамически вставляю элементы в форму (используя ajax, пользователь может добавить больше элементов, нажав кнопку [+]).

Мне удалось вставить мой новый Zend_Dojo_Form_Element_FilteringSelect на страницу, но этот элемент не поддерживает додзё (нет автозаполнения или стиля тундры).

Я предполагаю, что dojo преобразует существующие элементы формы после первой загрузки страницы и не анализирует их снова при добавлении нового узла... Но я не могу найти, как сообщить dojo о наличии новых элементов в городе.

Что я пробовал:

  • Выполнение dojo.parser.parse(); или dojo.parser.parse('id_of_new_element'); после вставки нового элемента
  • Добавление Zend_Dojo_View_Helper_Dojo::setUseDeclarative(); в мой метод init() Dojo_Form (как показано на на форумах Nabble< /а>)

Мой метод добавления новых элементов описан в Джереми Кендалл.

Я не знаю, связана ли моя проблема с несовместимостью с Zend, Dojo или я что-то упускаю...


person altermativ    schedule 03.11.2009    source источник


Ответы (1)


После некоторых возни мне наконец удалось запустить его.

В коде JavaScript Джереми Кендалла вам нужно вставить следующий скрипт в функцию ajaxAddField()

// Insert new element before the Add button
$("#addElement-label").before(newElement);

// Parse the element to receive Dojo style
var n = dojo.byId("newName" + id);
n.outerHTML = newElement;
dojo.parser.parse(n);

и заменить

searchString = '*[id^=newName' + lastId + '-]';
$(searchString).remove()

в функции removeField() с помощью

// Destroy dijits before destroying the node
var n = dojo.byId("newName" + lastId);
var dijits = dijit.findWidgets(n);
if (dijits) {
    for (var i = 0, n = dijits.length; i < n; i++) {
        dijits[i].destroyRecursive();
    }
}
dijits = dojo.parser.parse("newName" + lastId);

// Destroy the node
dojo.destroy("newName" + lastId);

Может быть, есть еще лучший способ сделать это, но это сработало для меня. При удалении узла диджиты должны быть уничтожены до, поскольку в противном случае HTML фрагмент больше не будет анализироваться.

person Gemane    schedule 17.01.2011