在Template play framework 1.2.6中获取Javascript变量

时间:2014-01-03 23:27:43

标签: javascript playframework-1.x

我需要在我的模板中获取一个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;。感谢

2 个答案:

答案 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é" );
        //  });
    }