【问题标题】:Complex Forms - how to generate new object_ids for each new element?复杂形式 - 如何为每个新元素生成新的 object_ids?
【发布时间】:2011-01-06 11:37:41
【问题描述】:

由于逻辑和缺乏 JQuery/Javascript 经验的结合,我发现自己遇到了这个问题。

背景 -
我正在使用 Complex-Form-Examples 的Jquery-deep branch,它启用了一次为多个嵌套表创建/编辑记录的表单。其中一部分是用户动态添加/删除新记录的能力。示例:用户可以创建一个包含许多任务(级别 B)的项目(级别 A),每个任务都有许多分配(级别 C)。

Javascript 添加 -
我已经构建了一个独立应用于每个任务的 javascript 函数。当用户从选择框中进行选择时,“true”的 id 为:"multiple_choice_" + f.object_id.to_s,该函数会找到它并突出显示一个名为 "true_" + f.object_id.to_s 的 div。

新元素没有新的 object_id -
每次用户添加新记录时,他们都有相同的object_id,这使得我上面的计划毫无用处。我尝试将此 object_id 添加到 rand(1000000000),但即使每次添加新任务时都是相同的。

我如何 (1) 每次添加任务时生成新的 object_ids / 随机数,或者 (2) 为每个任务使用不同的唯一标识符,每次添加都会有所不同?


在 application.js 中添加_child 代码:

$(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 元素的 ID。

【问题讨论】:

  • 也许这是一个重新提出的问题,但你不能简单地为 :child_index 生成一些东西(比如 Time.now.usec)吗?还是您始终将空任务模板保留在客户端?
  • 上面的代码在 application.js 中,每次运行时都会创建一个唯一的new_id。但是,我怎样才能从视图内部访问这个唯一编号?

标签: javascript jquery ruby-on-rails ruby-on-rails-3 nested-forms


【解决方案1】:

只需使用全局计数器:

var _taskCount = 0;
$(function() {
  $('form a.add_child').live('click', function() {
    ...
    var new_id  = "Task_" + _taskCount;
    _taskCount++;
    ...
  });
});

【讨论】:

  • 我知道这将为 new_id 创建一个不同的值,但我遇到的问题是如何为新可见的 html 元素赋予这个新值。即使在我上面的代码中,它也会生成不同的new_ids - 如何使用 Ruby 或其他方式访问这个变量?
  • @sscirrus 不熟悉 Ruby,抱歉.. 也许这个例子会有所帮助:$(this).parent().append('<div id="' + new_id + '">hello I'm Div #' + new_id + '</div>'); 这将在每次点击 add_child 链接时附加带有新 ID 的新 DIV 元素。跨度>
猜你喜欢
  • 2021-08-16
  • 2020-04-15
  • 2016-04-22
  • 2010-10-13
  • 1970-01-01
  • 2015-09-06
  • 2018-10-10
  • 1970-01-01
  • 2018-07-16
相关资源
最近更新 更多