和前面定义的javascript块:
我在模板中定义了一个按钮,如下所示:
<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}) }}"
但它也是在变量定义之前计算的,所以我得到了一个错误。
我可以让这条细枝线在我点击按钮后执行吗,这就是我想要的?或者我应该采取另一种方法?我如何在不使用twig的情况下执行该操作?
发布于 2012-10-10 22:11:30
假设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);
}
});
});
});
仅当Stuff:Stuff:action
中没有定义@Route
注释时,才需要其余的注释。
您将需要一个虚拟控制器操作:
/**
* @Template("AcmeDemoBundle::dummy.html.twig");
* @Route("/dummy", name="wrapperRoute");
*/
public function dummyAction(){
return array();
}
最后是dummy.html.twig:
{% render "Stuff:Stuff:action" with {'value' = value } %}
希望我没错过什么..。
https://stackoverflow.com/questions/12827831
复制相似问题