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

@Route アノテーションがないと仮定すると、それStuff:Stuff:actionをレンダリングするテンプレートのラッパー アクションを記述する必要がありますStuff:Stuff:actionStuffただし、コントローラーからの「アクション」に@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 に答える