0

第一个字段是评论家的标题,第二个字段是评论家的内容。当我在标题字段中写入内容时,会自动在数据库中创建对象 Critic。在这种情况下,我有一个新的评论家的新行,但在内容的 fileld 中,该值为空。在这种情况下会出现一个确认对话框。

当确认对话框出现时,我应该怎么做才能单击“确定”按钮,除了被重定向到新模板外,还要执行控制器的 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

我不清楚删除控制器的路径是什么。我将假设路由名称为“my_pys”的“/Pys/{pysStr}”。此外,您当前的“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 回答
0

看看FOSJsRoutingBundle。它也使您可以在 JavaScript 中使用您的路由。

安装捆绑包后,修改您的Controller annotation

eliminar_critica:
    locales: { es: "/eliminar-critica/{pysStr}/", en: "/delete-critic/{pysStr}/" }
    defaults: { _controller: UsuarioBundle:Default:eliminarCritica }
    options:
        expose: true

之后,您可以使用这段 JavaScript 代码来访问路由:

Routing.generate('eliminar_critica', { pysStr: 10 });
// will result in /eliminar-critica/10/

$.get(Routing.generate('eliminar_critica', { pysStr: 10 }));
// will call /eliminar-critica/10/ without redirecting your browser

如需进一步阅读,您应该阅读有关jQueryAJAX的信息


在您的 JavaScript 中:

$('a').on('click', function(e) {
    if( ! $('#criTitulo').val() || ! $('#criContenido').val() ) {
        if ( ! $('#criTitulo').val() && $('#criContenido').val() ) {
            if(! window.confirm( 'Falta el titulo' )) {
                e.preventDefault();
            } else {
                // insert this line: (optional add a callback)
                $.get(Routing.generate('eliminar_critica', { pysStr: 10 }));
            }
        }
        else if ( ! $('#criContenido').val() && $('#criTitulo').val() ) {
            return confirm('Falta el contenido');
        }   
    }
});

对于一个很好的回调,比如

您的实体已被删除!

看看get() 这里的 jQuery 方法

于 2013-08-05T10:27:52.303 回答