3

Rails のオブジェクトにマップする、ユーザーが入力できるフォームがあります。

フォーム内のフィールドの 1 つが、既に作成されているオブジェクトのインスタンスにオートコンプリートされます。

その1つのフィールドでオートコンプリートオプションが選択されている場合、そのインスタンスのデータに基づいてフォーム全体に入力されるようにしようとしています.

これを行う最善の方法は、すべてのデータを取得してフォームを再レンダリングするオートコンプリートが選択されたら、ajax 呼び出しを使用することだと思いますか? フィールドが自動入力されてからフォームが自動入力されるまでの間に望ましくない遅延が生じるようです。

必要なすべてのデータをオートコンプリート データに格納し、フォームをすぐに自動入力することは可能ですか?

4

3 に答える 3

2

データにすぐにアクセスしたい場合は、データをプリロードする必要があります。そうするための多くの方法。しかし、AJAXオートコンプリートを使用していることを考えると(私の側では)、AJAXリクエストがサーバーにラウンドトリップするので、そのわずかなレイテンシーで生きることをすでに決定しているように思われます。ユーザーがオートコンプリートフィールドの値を選択したら、その時点でAJAXを介して対応するデータをロードするだけです。遅延が長すぎて好みに合わない場合は、「スピナー」グラフィックを検討してください。これは最近のネットでは非常に一般的なパラダイムであり、0.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

ルビーについてはよくわかりませんが、フォームがロードされたときに 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クリックイベントを添付すると、gon値からデータが取得され、AJAXリクエストを行わずにデータがあちこちに表示されます。

于 2012-08-09T16:19:43.043 に答える