模板播放框架 1.2.6 中获取 Javascript 变量
Posted
技术标签:
【中文标题】模板播放框架 1.2.6 中获取 Javascript 变量【英文标题】:Get Javascript variable in Template play framework 1.2.6 【发布时间】:2014-01-03 23:27:43 【问题描述】:我需要在我的模板中获取一个 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;。谢谢
【问题讨论】:
【参考方案1】:您的问题的主要原因是播放模板引擎是在服务器端执行的,而 javascript 代码是在客户端执行的(即进入网络浏览器)。
因此,如果您想从服务器状态(来自 java)添加变量,您应该在服务器端“编写”(注入)您的 javascript 代码,这样当页面加载到客户端时它就会出现,因此可以在那里执行。
为此,首先您需要使用以下代码将您的 circle 变量从控制器发送到视图:
Circle circle=getYourCircle();
render("path/to/your/view",circle);
接下来,在您的视图文件中,只需替换初始化位置的行:
var position= $circle.top;
同样,$ 表达式将在服务器上进行计算,其值将写入将返回给客户端的响应正文中。因此,在这种情况下,如果您的圆的 top 属性值等于 40,浏览器将获得:
var position= 40;
对应的行。
反过来(即读取模板中的 javascript 变量)是不可能的,除非您向服务器发出请求(例如通过使用一些 jQuery.ajax 变体),并发送javascript 变量。
请求应该被控制器接受,并且变量的值应该委托给视图(与第一个代码 sn-p 中的过程相同)。即使这样,播放模板引擎也将能够访问“javascript”变量(现在是请求范围变量)并对其进行额外的转换。
我希望这会有所帮助:)
【讨论】:
【参考方案2】:谢谢!我终于用上了Ajax机制:
...
var allPosition='';
for (var m in map)
allPosition+= m +'-' + map[m].top + '-' + map[m].left+'/';
var updateUserRoute = #jsRoute @Application.saveDisposition() /
...
函数调用Ajax(updateUserRoute,allPosition)
$.ajax(
url: updateUserRoute.url(),
type: updateUserRoute.method,
data: positionTables: allPosition
);
//.done(function( msg )
// alert( "disposition des tables sauvegardé" );
// );
【讨论】:
以上是关于模板播放框架 1.2.6 中获取 Javascript 变量的主要内容,如果未能解决你的问题,请参考以下文章
我需要在生产模式下运行预编译吗?还是为我做的(播放框架 1.2.6)