【问题标题】:How to access an HTML template argument passed from controller in a Javascript function如何在 Javascript 函数中访问从控制器传递的 HTML 模板参数
【发布时间】:2013-09-26 14:42:21
【问题描述】:

我的应用正在使用播放框架 mvc 设置。在控制器中,我在渲染模板时传递了一个参数,如下所示:

public static void scenario(){
     ...
     render(active_brands);  
}

现在在我的 HTML 页面“scenario.html”中,我可以使用播放框架标签访问参数,如下所示:

#{list items:active_brands, as:'c'}
...
#{\list}

或者在这样的 HTML 表中使用 JQuery:

<td>${active_brands.get(1)}</td>

仅供参考,传入的参数是一个List。

但是,我正在尝试从 javascript 函数中访问参数“active_brands”,但不知道该怎么做。 我认为使用 Jquery 访问变量会起作用,我尝试像这样访问变量:

function update_brands(active_scenario_ids){
    ...
    alert('Reached: '+ ${active_brands});
}

但这不起作用。在我看来,HTML 属性超出了 javascript 函数的范围。真的吗? 如果有人可以帮助我,那就太好了。谢谢。

【问题讨论】:

    标签: javascript jquery html templates playframework


    【解决方案1】:

    这适用于我使用 Play 2.2.0:

    Application.scala(控制器):

      def index = Action { implicit request =>
    
       val message = "This is a test."
    
       Ok(views.html.test(message))
    
      }
    

    test.scala.html(查看模板):

    @(message: String)
    
    <script type="text/javascript">
    $(document).ready(function(){
    
    console.log("@message");
    
    });
    
    </script>
    

    控制台输出:

    这是一个测试。

    【讨论】:

    • 感谢您的回复@dbau。尽管我使用的是 Java 框架而不是 scala 框架,但如您的示例所示,我发现问题不是由于变量的范围造成的。变量“active_brands”是一个 java.util.List,可以在播放标签中读取但不能在 javascript 中读取的原因是因为 javascript 无法在没有 JSON.Parse() 的情况下从其类型中隐式解析对象。然而,播放标签是服务器端代码,因此 POJO 可以被标签识别。请在下面查看我的答案。
    • 很高兴你把它整理好了! :)
    【解决方案2】:

    问题的根源在于,我的模板变量(可在客户端 HTML 中访问)是 java.util.List 类型,客户端代码无法访问,即。 javascript。但是,它在播放标签中被识别,因为播放标签是在客户端编写的服务器端代码。所以我能找到的读取 java 集合中的对象的唯一解决方案是返回一个 JSON 对象。

    因此,我不得不更改我的代码,而不是将 Java 列表作为模板变量返回,而是通过 ajax 调用将数据作为 JSON 对象检索。

    $.ajax({
                url: '/getBrands/',
                type: 'POST',
                data: {active_scenario_ids: active_scenario_ids},
                dataType: "json",
    
                success: function(data){
                    console.log(data);
                },
                error: function(req, status, error){
                    alert("R:"+req+"S:"+status+"E:"+error);
                }
            });
        }
    

    【讨论】:

      猜你喜欢
      • 2018-06-28
      • 1970-01-01
      • 2020-09-18
      • 2019-12-24
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多