0

我的模板中有一个按钮,定义如下:

<input type="button" value="Button"
       onclick="callController('someValue')"/>

和前面定义的 javascript 块:

<script type="text/javascipt">
    function callController(value)
    {
        //Code to call the controller here, passing value
    }
</script>

我试着用

{% render "Stuff:Stuff:action" with {'value' = value } %}

,但是当我单击按钮时进入页面而不是关闭该行,并且它抱怨未定义值(因为它仅在单击按钮后才定义)。我也试过

window.location.href = "{{ path('routeToPage', {'value' = value}) }}"

但它也在定义变量之前进行了评估,所以我得到了一个错误。

我可以让它在我单击按钮后执行这条树枝线,这就是我想要的吗?还是我应该采取另一种方法?我怎么能在不使用树枝的情况下执行该动作?

4

1 回答 1

0

假设Stuff:Stuff:action没有 @Route 注释,您需要编写一个包装器操作,您将在其模板中呈现它Stuff:Stuff:action。但是,如果来自StuffController的“动作”确实有 @Route 它就更简单了。

无论如何,我想到了 AJAX:

在这里,我使用了 jQuery,但您可以自由使用您选择的库(或不使用任何库):

<input id="controllerLoader" type="button" value="Button" />

$(function(){
    $('#controllerLoader').click(function(e){
        $.ajax({
            url: '{{ path('wrapperRoute')}}', // or direct call if there is a `@Route`
            type: 'post',
            dataType: 'html',
            success: function(responseHtml){
                $('#controller_embed_position').html(responseHtml);
            }
        });
     });
});

剩下的只有在没有@Route定义注解时才需要Stuff:Stuff:action

您将需要一个虚拟控制器操作:

/**
 * @Template("AcmeDemoBundle::dummy.html.twig");
 * @Route("/dummy", name="wrapperRoute");
 */
public function dummyAction(){
    return array();
}

最后,dummy.html.twig:

{% render "Stuff:Stuff:action" with {'value' = value } %}

希望我没有错过什么...

于 2012-10-10T22:11:30.283 回答