1

で生成Symfony2およびレンダリングされるかなり複雑なフォームがあります。フォームは e コマースの注文を変更するために使用されるため、最終送信の概念はありません。Ajax 経由でフォームを送信する場合、古いフォームを新しいフォームと同期するための次のステップは何ですか? それを使用してフォーム全体を返し、古いフォームを完全に上書きするか、変更を検出して更新するために使用できる JSON データを返すことを考えました。TwigJQuery

私の直感では、新しい変更を検出して更新するために JSON データを返すことが最善の方法であると言っています..しかし、大きなフォームでは、チェックすべきことがたくさんあります。ラベル、エラー、ヘルプ、値。基本的に、form update logic大きくなり、メンテナンスの問題が非常に急速に発生することがわかります。

AJAX を介してより大きなフォームを更新するためのベスト プラクティスが何であるかを知りたいと思っています。多分私は標準化されたテクニックを欠いています。

4

3 に答える 3

1

大きなフォームを更新するには、非常に具体的な JSON オブジェクトを返します。これにより、for-each ループを実行してチェックを自動化できます。以下にサンプルを載せておきます。

data:
    firstField:
        name: "name"
        error: "none"
        help: "This is a help string"
        value: "$49.99"
        quantity: "2"
        subForm1: 
            value1: "something"
            value2: "somethingElse"
    //etc...

このオブジェクトを返した後、次の疑似コードが行うようなことを行うことができます

for field in data
    find element with name field.name
        if element.error is not field.error, element.error = field.error
        if element.quantity is not field.quantity, element.quantity = field.quantity
        //ifs for each intended field of the form
        element.find newElement with name subform1
            if newElement.value1 is not field.subform1.value1 update it
        //etc...

これにより、フォームへの変更を検出するかなり簡単な方法を作成し、更新が必要なフィールドのみを更新できます。

于 2013-03-20T17:45:00.180 に答える
0

私が正しく理解していれば、「古いフォームを新しいフォームと同期する」というのは、基本的にコントローラーに永続的な最終送信がないという概念です。返される json チャンクごとにコントローラー アクションがありますが、最終送信の概念を使用します。ただし、これらのコントローラーに永続呼び出しを配置することで、これを使用してテクニックを使用できます。

jsのようなもの:

$('#field').on(function(){
           $.ajax({
                url: // url to your controller 
                     // captures relevant information via
                     // javascript and passes it via querystring
                     // or possibly post
                ,dataType: 'jsonp'
                ,success: function(entities, status, ob) {
                    // javascript response
                    // for display purposes
                }});
}); 

標準の symfony コントローラーを使用し、リクエスト文字列またはポストパラメーターを処理してデータベースを更新します。

于 2013-03-20T17:57:29.353 に答える
0

これが最善の方法であったかどうかはわかりませんが、Spring MVC を使用する私のような初心者にとっては、AJAX 送信を保存した後、基本的に HTML コンテンツを含む「ビュー」を返すだけです。

表示するのに便利なコードはありませんが、概念的には次のようになります。JSON の方がブラウザーへのペイロードは小さいと思いますが、私のようなダミーにとっては、HTML を送信する方が簡単でした。

<form action="/form/save" method="post">
  First name: <input type="text" name="firstname"><br>
  Last name: <input type="text" name="lastname">
</form>

<form action="/form/save" method="post">
<!-- Start: This is the HTML that the "view" returns after the form is submitted via AJAX -->
  First name: <input type="text" name="firstname" value="Mark"><br>
  Last name: <input type="text" name="lastname" value="McGuire">
<!-- End: -->
</form>
于 2013-03-20T17:45:54.553 に答える