1

I am looking for the practice which is most advisable in terms of coding practice

I have a comment system which for each comment, you can reply to. This leads me to several options on implementing this (presume the backend is already created)

  1. When the user clicks 'reply', ajax is fired, getting the appropriate partial (including the authenitcation token, etc) and it inserts that into the appropriate place
  2. I have a hidden form for each comment, and clicking reply will just make it visible
  3. I use javascript to generate the form on the fly when the user click reply and insert it to the appropriate div where the reply was clicked

My problems with each is

for 1 - This causes requests, delay and I am not sure ajax is needed here

for 2 - Too many forms on the page.. Imagine thousands of comments so for each comment there will be a form which looks more or less the same

for 3 - I don't know if I can generate the authenticity token on the client

the form should look something like

        <form accept-charset="UTF-8" action="comments/3/reply" data-remote="true" method="post">
    <div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓">
<input name="authenticity_token" type="hidden" value="J0/asxkDH....vdlKLOUuQ9/TAxACWnZKdwy+c="></div>
                    <textarea id="comment" name="comment" class="tae" style="overflow: hidden;"></textarea>
                    <input name="commit" type="submit" value="Send">
    </form>
4

1 に答える 1

2

以前に同様のケースに遭遇し、#1 に似た Ajax ソリューションで終了しました。

#2については、はい、非表示であってもフォームが多すぎます。私はそれが好きではありません。

#3 については、Backbone で人気のあるスタイルである JS テンプレートを使用することを考えました。しかし、その時点では、成熟した最新の jQuery テンプレート ソリューションは見つかりませんでした。その場合も時間が足りなかったので諦めました。

追加: #3 の Authenticity_token については、テストしていませんが、フォーム テンプレートがトークンの準備ができた状態で既に DOM に出力されている場合、これは問題にならないと思います。それらは同じユーザーと同じタイプのオブジェクト用です。オブジェクト ID またはその他のマイナーな変更のみが必要です。注意すべきことの 1 つは、成功した Ajax 要求が処理されたら、Ajax によってテンプレートをリロードする必要があることです。

#1でいいと思います。Ajax リクエストが多すぎることはありません。ユーザーは必要なときにのみフォームを要求し、遅延はごくわずかであるため気付かないほどです。ローディング効果を強化するように設定sleepしました :) その上、Basecamp は Ajax を多用して動的なものをレンダリングします。

PSレオンが私の文法を修正してくれてありがとう:)

于 2013-05-18T07:54:05.107 に答える