3

我有一个表格,用户可以填写该表格映射到 Rails 中的对象。

表单中的一个字段会自动完成已创建的对象实例。

我正在尝试这样做,以便如果在该字段上选择了自动完成选项,它将根据该实例的数据填写整个表单。

我假设完成此操作的最佳方法是在选择自动完成后通过 ajax 调用获取所有数据并重新呈现表单?这似乎会在字段自动填写和表单自动填写之间产生不希望的延迟。

那么是否可以在自动完成数据中包含所有必要的数据并立即自动填写表格?

4

3 回答 3

2

如果您想即时访问您的数据,则需要预加载它。有很多方法可以做到这一点。但考虑到您正在使用 AJAX 自动完成(我的假设),您似乎已经决定忍受 AJAX 请求往返服务器的那一点延迟。鉴于此,一旦用户选择了自动完成字段值,此时只需通过 AJAX 加载相应的数据。如果延迟对您的口味来说太长,请考虑使用“微调器”图形。这是当今网络上如此普遍的范例,如果它需要 <.5 秒,没有人会三思而后行。

至于正在填写的表单 - 在某些时候,您需要遍历对象或表单字段并使用对象中的相应值填充它们。在此处使用命名约定可以帮助您,例如考虑让表单的输入具有与对象中的实例变量名称相对应的类名称,例如:

var instance = {
   name:'chapmand',
   beard:'brown',
   reputation:26
}

然后,您的表单可能包含以下字段:

<form id="my-form" ...>
    <input class="name" type="text"></input>
    <input class="beard" type="text"></input>
    <input class="reputation" type="text"></input>
    ...
</form>

最后,一旦您将对象的实例与用户输入的内容相匹配,请执行以下操作:

$('#my-form input.data').each(function(){
    $(this).val(instance[$(this).attr('class')]);
});

当然是人为的例子和很多方法,但这可能会帮助你开始。

干杯

于 2012-08-09T15:55:16.293 回答
0

我对 ruby​​ 了解不多,但我假设您可以在表单加载时使用 ajax 提取数据,然后如果他们决定选择自动完成选项,那么它会使用已经提取的数据来填写表单。

只需将 ajax 数据存储在一些变量中以供以后使用。

(如果您需要实际的编码示例,请给我评论并告诉我)

于 2012-08-09T15:52:14.040 回答
0

为此,您可以使用 gon 和 rabl gem。

https://github.com/gazay/gon

https://github.com/nesquena/rabl/

使用 gon 和 rabl,您将存储完整的数据以供 Javascript 使用。在文本字段上附加一个 jquery click 事件,它将从 gon 值中获取数据,并将在那里和那里显示数据,而无需发出任何 AJAX 请求。

于 2012-08-09T16:19:43.043 回答