我的模板中有一个按钮,如:
<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}) }}"
但它也在定义变量之前进行了评估,因此我收到错误。
我可以在点击按钮后执行此枝条线,这是我想要的吗?或者我应该采取另一种方法?如何在不使用树枝的情况下执行该操作?
答案 0 :(得分:0)
假设Stuff:Stuff:action
没有@Route注释,您需要在其模板中编写一个包装器操作,以呈现Stuff:Stuff:action
。但是,如果来自Stuff
控制器 的“操作”有@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 } %}
希望我没有错过任何东西......