我需要在我的模板中获取一个javascript变量(播放框架1.2.6):
#{extends 'main.html' /}
#{set title:'My Resa V.1' /}
<div id="content">
<div id="draggable" class="ui-widget-content">
<p>Drag me around</p>
</div>
<div id="circle"> <center>table 1</center></div>
</div>
<script>
$(function() {
$( "#draggable" ).draggable();
$( "#circle" ).draggable({
stop: function(event, ui) {
var circle = $(this).position();
var position= circle.top;
}
});
});
</script>
我想得到var position = circle.top;。感谢
答案 0 :(得分:0)
问题的主要原因是播放模板引擎在服务器端执行,javascript代码在客户端执行(即进入Web浏览器)。
因此,如果你想从服务器状态(从java)添加变量,你应该&#34;写&#34; (注入)你的javascript代码在服务器端,因此它将在页面加载到客户端时出现,因此可以在那里执行。
为了做到这一点,首先需要使用以下代码将您的circle变量从控制器发送到视图:
Circle circle=getYourCircle();
render("path/to/your/view",circle);
接下来,在您的视图文件中,只需替换初始化位置的行:
var position= ${circle.top};
同样,$ {}表达式将在服务器上进行评估,并且该值将写入将返回给客户端的响应正文中。因此,在这种情况下,如果您的圈子的顶级属性的值等于40,则浏览器将获得:
var position= 40;
为对应的行。
换句话说(即在模板中读取javascript变量)是不可能的,除非你向服务器发出请求(例如通过使用一些jQuery.ajax变体),并发送值的javascript变量。
请求应该由控制器接受,并且应该将变量的值委托给视图(与第一个代码片段中的过程相同)。即使这样,播放模板引擎也能够访问&#34; javascript&#34;变量(现在是请求范围变量)并对其进行其他转换。
我希望这会有所帮助:)
答案 1 :(得分:0)
谢谢!我终于使用了Ajax机制:
...
var allPosition='';
for (var m in map){
allPosition+= m +'-' + map[m].top + '-' + map[m].left+'/';
}
var updateUserRoute = #{jsRoute @Application.saveDisposition() /}
...
function callAjax(updateUserRoute,allPosition){
$.ajax({
url: updateUserRoute.url(),
type: updateUserRoute.method,
data:{ positionTables: allPosition}
});
//.done(function( msg ) {
// alert( "disposition des tables sauvegardé" );
// });
}