0

ZF2 で作成されたコレクションがあります。HTML コードは、たとえば次のように検索します。

<fieldset id="benutzer">
<legend>Team</legend>
<div class="controls-row">
 <span data-template="<input type="hidden" name="projekt[benutzer][__placeholder__][benutzerid]" class="benutzerid" value=""><input name="projekt[benutzer][__placeholder__][benutzername]" class="benutzername" title="Kollege" placeholder="Name" type="text" value=""><input type="hidden" name="projekt[benutzer][__placeholder__][bearbeiten]" value="0"><input type="checkbox" name="projekt[benutzer][__placeholder__][bearbeiten]" title="Bearbeiten" class="bearbeiten" value="1"><input name="projekt[benutzer][__placeholder__][bemerkung]" title="Bemerkung" placeholder="Bemerkung" type="text" value="">"></span>
<input type="hidden" value="4" class="benutzerid" name="todo[benutzer][0][benutzerid]">
<input type="text" value="Julian" placeholder="Name" title="Kollege" class="benutzername" name="todo[benutzer][0][benutzername]">
<input type="hidden" value="0" name="todo[benutzer][0][bearbeiten]">
<input class="bearbeiten" type="checkbox" checked="checked" value="1" title="Bearbeiten" name="todo[benutzer][0][bearbeiten]">
<input type="text" value="" placeholder="Bemerkung" title="Bemerkung" name="todo[benutzer][0][bemerkung]">
<div>
<div class="row">
<input type="hidden" value="5428" class="benutzerid" name="todo[benutzer][0][benutzerid]">
<input type="text" value="Hans" placeholder="Name" title="Kollege" class="benutzername" name="todo[benutzer][0][benutzername]">
<input type="hidden" value="0" name="todo[benutzer][0][bearbeiten]">
<input class="bearbeiten" type="checkbox" checked="checked" value="1" title="Bearbeiten" name="todo[benutzer][0][bearbeiten]">
<input type="text" value="" placeholder="Bemerkung" title="Bemerkung" name="todo[benutzer][0][bemerkung]">
<div>
</fieldset>

ユーザーは、チェックボックスのチェック/チェック解除、入力フィールドの編集だけでなく、行の削除および/または追加もできるようになりました。ZF2 のコレクションでは、その行のインデックスを 0 から開始し、各行を 1 ずつカウントアップする必要があります。つまり、行を削除し、その行がコレクションの最後に偶然存在しなかった場合、インデックスを修正する必要があります。jQueryでこれをやろうとしています。

そして、ここに私の問題があります: 行を再ソートする前に何かを変更した場合 (そして、フォームを送信する前に毎回最後にこれを行います)、変更は保持されません。チェックボックスをオンにすると、「Bemerkung」フィールドに何かを入力すると、すべてが破棄されます。

これが私のコードです:

新しい行を追加します。

function add_category( $collectionType ) {
    // Create and append new row
    var $template = $('#'+$collectionType+' span').data('template');
    var $currentCount = $('#'+$collectionType+' .'+$collectionType+'id').length;
    $template = $template.replace(/__placeholder__/g, String($currentCount));
    $newrow = "<div class=\"controls-row new-row\">"+$template+"<div class=\"span1\"><a href=\"#\" class=\"_delete-row\"><i class=\"icon-remove\"></i></a></div></div>";
    $('#'+$collectionType).append($newrow);         
    return false;
}

コレクションを並べ替えます。

 $.fn.resortCollection = function (){   // execute with Collection-Fieldset!
            $c = 0; 
            $fieldset = $(this);
            // re-sort the rows, indexes
            $.each( $fieldset.find('.controls-row'), function(){            
                $html = $(this).html();
                $newhtml = $html.replace(/\[\d+\]/g, '['+$c+']');
                $(this).html($newhtml);
                $c++;
            });
        }; 

コレクション内の行を削除します。

 $.fn.deleteRow = function (){
            var $row = this.closest('div.controls-row');
            var $fieldset = $row.closest('fieldset');
            $($row).remove();
            $fieldset.resortCollection();
        };

行を再ソートしながら、変更を含む DOM の現在の状態にアクセスするにはどうすればよいですか?

4

1 に答える 1