Сложные формы - как генерировать новые object_ids для каждого нового элемента? - PullRequest
2 голосов
/ 06 января 2011

Из-за сочетания логики и отсутствия опыта работы с JQuery / Javascript я столкнулся с этой проблемой.

Справочная информация -
Я использую JQuery-глубокую ветвь of Complex-Form-examples, которая включает форму, которая создает / редактирует записи для нескольких вложенных таблиц одновременно.Частью этого является возможность для пользователя динамически добавлять / удалять новые записи.Пример: пользователь может создать проект ( уровень A ) со многими задачами ( уровень B ), каждый из которых имеет множество назначений ( уровень C ).

Дополнения Javascript -
Я создал функцию javascript, которая применяется независимо к каждой Задаче.Когда пользователь выбирает из поля выбора, «true» имеет идентификатор: "multiple_choice_" + f.object_id.to_s, и функция находит это и выделяет div с именем "true_" + f.object_id.to_s.

Новые элементы не имеют новых object_id's -
Каждый раз, когда пользователь добавляет новую запись, все они имеют один и тот же object_id, что делает мой вышеуказанный план бесполезным.Я попытался добавить этот object_id к rand(1000000000), но даже он идентичен каждый раз, когда добавляется новая задача.

Как я могу (1) генерировать новые object_ids / случайные числа каждый раз, когда добавляется задача, или (2) использовать разные уникальные идентификаторы для каждой задачи, которые будут отличаться для каждойсложение?


код Add_child в application.js:

$(function() {
  $('form a.add_child').live('click', function() {
    var assoc   = $(this).attr('data-association');
    var content = $('#' + assoc + '_fields_template').html();
    var regexp  = new RegExp('new_' + assoc, 'g');
    var new_id  = new Date().getTime();
    $(this).parent().before(content.replace(regexp, new_id));
    return false;
  });
});

уточнение

Проблема не в том, как сгенерировать случайное число в приведенном выше коде .js,Проблема заключается в том, как получить доступ к этому новому случайному числу из вновь сгенерированного кода, например, для формирования идентификатора html-элемента.

1 Ответ

1 голос
/ 06 января 2011

Просто используйте глобальный счетчик:

var _taskCount = 0;
$(function() {
  $('form a.add_child').live('click', function() {
    ...
    var new_id  = "Task_" + _taskCount;
    _taskCount++;
    ...
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...