0

最初のフィールドは批評家のタイトル、2 番目のフィールドは批評家の内容です。タイトル フィールドに何かを書き込むと、データベースに Critic オブジェクトが自動的に作成されます。この状況では、新しい批評家の新しい行がありますが、コンテンツのフィールドでは値が null です。この場合、確認ダイアログが表示されます。

確認ダイアログが表示されたら、「OK」ボタンをクリックして、新しいテンプレートにリダイレクトされる以外に、Controller の eliminarCriticaAction を実行するにはどうすればよいですか。

$('a').on('click', function(e) {
        if( ! $('#criTitulo').val() || ! $('#criContenido').val() ) {
            if ( ! $('#criTitulo').val() && $('#criContenido').val() ) {
                if(! window.confirm( 'Falta el titulo' )) {
                    e.preventDefault();
                }               
            }
            else if ( ! $('#criContenido').val() && $('#criTitulo').val() ) {
                return confirm('Falta el contenido');
            }   
        }
    });

コントローラーの削除アクション:

public function eliminarCriticaAction($pysStr)
{
    $em = $this->getDoctrine()->getManager();
    $pys = $em->getRepository('PYSBundle:Pys')->findPys($pysStr);
    $usuario = $this->get('security.context')->getToken()->getUser();
    $critica = $em->getRepository('UsuarioBundle:Usuario')->findCritica($usuario, $pys);

    if(!$critica) 
    {
        throw new AccessDeniedException("No hay ninguna crítica que borrar");
    }

    $em->remove($critica);

    $em->flush();

}

編集

$('a').on('click', function(e) {
    var titulo = $('#criTitulo').val(), contenido = $('#criContenido').val();
    console.log(titulo);
    console.log(contenido);
    if ( ( titulo && !contenido ) || ( !titulo && contenido ) ) {
        e.preventDefault();
        console.log('Link clicked !');
        if (window.confirm( 'Falta el titulo' )) {
            $.get(Routing.generate('eliminar_critica.' + $('html').attr('lang'), { "_locale": $('html').attr('lang'), "pysStr": $('section').attr('pelicula') }));
            window.location.href = $(e.target).attr('href');
        }
    }
});
4

2 に答える 2

0

削除コントローラーへのルートが不明です。「/Pys/{pysStr}」をルート名「my_pys」とする。また、現在の「pysStr」は、小枝テンプレートで変数として利用できるはずです。ディスプレイコントローラーに次のものを入れたと仮定します:

'currentPysStr' => $pysStr    (put this in the render method are argument)

$('a').on('click', function(e) {
    if( ! $('#criTitulo').val() || ! $('#criContenido').val() ) {
        if ( ! $('#criTitulo').val() && $('#criContenido').val() ) {
            if(! window.confirm( 'Falta el titulo' )) {
                e.preventDefault();
            } else {
                $.get({{ path('my_pys', {'pysStr': currentPysStr}) }})
            }
        }
        else if ( ! $('#criContenido').val() && $('#criTitulo').val() ) {
            return confirm('Falta el contenido');
        }   
    }
});

次に、削除コントローラーに現在の PysStr があり、このコントローラーは、確認ダイアログで [OK] を押したときにのみ呼び出されます。

注文の質問と同じように、このスクリプトを小枝テンプレートに配置するか、グローバル変数を使用するかを選択できます。( https://stackoverflow.com/questions/18035337/translate-the-jeditable-plugins-attributes/18035436#18035436 )

編集:(チャット後)

$('a').on('click', function(e) {
    var titulo = $('#criTitulo').val(),
        contenido = $('#criContenido').val();
    console.log(titulo);
    console.log(contenido);
    // Requested: XOR
    // One of the values must be set, the other one must not be set
    if ( ( titulo && !contenido ) || ( !titulo && contenido ) ) {
            e.preventDefault();
            console.log('Link clicked !');
            if (window.confirm( 'Falta el titulo' )) {
                var ajax;
                var url = Routing.generate('eliminar_critica.' + $('html').attr('lang'), { "_locale": $('html').attr('lang'), "pysStr": $('section').attr('pelicula') });
                console.log(url); // This is just here for debugging purposes
                ajax = $.get(url);
                ajax.done(function() {
                    window.location.href = $(e.target).attr('href');
                });
            }
    }
});

ページの更新前にリクエストが行われたことwindow.location.hrefdone()保証する

eliminarCriticaActionすべてが進行したという応答 (2**) 応答を返す必要があります。204 は次のように適切です。

return new response('', 204); // 204: No Content

于 2013-08-05T09:57:02.067 に答える