Манипуляции с разделителями с помощью Dojo 1.5 - PullRequest
0 голосов
/ 03 декабря 2010

Я недавно приобрел веб-продукт в моей компании. Первоначально он был разработан с использованием более старой версии Dojo, работающей поверх Catalyst / Template Toolkit (поэтому все это передается в Perl на серверной части). С тех пор я предпринял шаги, чтобы, по крайней мере, идти в ногу со временем и отправился в Додзё 1.5

Конкретно проблема, которую я сейчас пытаюсь решить, связана с разделительными идентификаторами. Это страница формы, которая сначала имеет поле со списком, раскрывающийся список и текстовое поле. В интересах краткости я сгущу это ..... HTML выглядит так ....

<div id="actions">
      <div id="prelim_actions_1_div">
   Variable: <input type="text" value="" 
                class=lighttext size=50 
                id="prelim_actions_xvar_1" 
                name="prelim_actions_xvar_1"/> 

   <a href="javascript:void();" title="Delete" 
      onclick="delete_section('prelim_actions_1_div')">
      <img src="http://localhost:3000/static/images/16-square-red-delete.png"/></a>

  <a href="javascript:void();" title="Insert Below" 
     onclick="add_action_below('prelim_actions', 'prelim_actions_1_div')">
     <img src="http://localhost:3000/static/images/16-em-down.png"/></a>

  </div>
</div>

Первый Javascript href позволяет вам удалить текстовое поле (title = "Delete"), а второй - добавить еще одно текстовое поле, которое успешно увеличивает идентификаторы делителей. В приведенном выше примере

<div id="actions"> 

успешно вложится в него ...

<div id="prelim_actions_1_div">
 ........
 ........
</div>
<div id="prelim_actions_2_div">
....
....
</div>

Проблема в том, что dang delete функция в JavaScript. Я нашел возможным с помощью различных комбинаций добавления и удаления, как у реального пользователя, вызывать ошибки в Firebug, пытаясь зарегистрировать уже зарегистрированный div и успешно писать несколько идентификаторов div с одинаковым именем.

Итак, мой вопрос, и я не ищу кого-то, кто мог бы напечатать мне решение (но я должен попытаться изучить это), заключается в том, существует ли более простой способ сделать это. Это возможность динамически добавлять и удалять текстовые поля и быть уверенным, что каждое из них имеет уникальный идентификатор (и имя) div, прежде чем будет нажата кнопка «Отправить».

У любых профессионалов по додзё / javascript есть какие-нибудь слова мудрости или ссылки, которые могут помочь мне указать верное направление? Джени

1 Ответ

1 голос
/ 03 декабря 2010

Многое зависит от того, как delete_section и add_action_below работают сейчас. Я бы посоветовал вам сделать delete_section очень тупым - просто вслепую удалите переданный div. При выполнении вашей функции add_action_below сделайте что-то вроде этого:

//figure out the next available spot
var i = 1;
while(dojo.query('#prelim_actions_'+i).length){
  i++;
}

console.log('available id: prelim_actions_'+i);
//create div contents
//append after clicked section

Я не уверен, как работает бэкэнд вашего приложения, но, скорее всего, вы можете просто просмотреть параметры и найти те, которые названы prelim_actions_xvar_.*, и все будет хорошо.

...