如何在视图中将变量从控制器传递到javascript?

时间:2012-10-15 16:46:41

标签: javascript ruby-on-rails ruby ruby-on-rails-3 partial-views

我有一个数组@fields,它有文本和id,asset_id。 要将局部变量从控制器传递到渲染中的视图,我们使用

render(:template => "assets/invalid", :locals => {:asset_id => params[:id], :fields => @fields})

视图是

<div id="panel">
  <script>
    alert('Invalid values for ')
    window.location = "../assets/" 
  </script>
</div>

这应该会生成一个弹出框。但是,我希望弹出框重定向到“../assets/asset_id”并显示“+字段的值无效”

以下不起作用,

<div id="panel">
  <script>
    var fields = fields
    var asset_id = asset_id 
    alert('Invalid values for ' + fields )
    window.location = "../assets/" + asset_id 
  </script>
</div>

3 个答案:

答案 0 :(得分:3)

这可能就这么简单吗?

<div id="panel">
  <script>
    var fields = <%= fields.to_json %>
    var asset_id = <%= asset_id.to_json %>
    alert('Invalid values for ' + fields )
    window.location = "../assets/" + asset_id 
  </script>
</div>

更新顺便说一句,为什么您需要将fieldsparams作为本地变量传递,为什么不在视图中使用@fields

答案 1 :(得分:1)

我在几个应用程序中使用的方法,客户端代码使用服务器数据的必要条件是构建一个哈希并将其呈现为页面上的json文字,并让我的所有JS引用该对象。它与上面提到的方法相同,但它更清晰,因为您不必将大量服务器标签混合到JS代码中。更易于阅读和维护。

答案 2 :(得分:0)

这个错误

<div id="panel">
  <script>
    var fields = fields
    var asset_id = <%= asset_id %> 
    alert('Invalid values for ' + fields )
    window.location = "../assets/" + asset_id 
  </script>
</div>

现在你可以将数据传递给html进行预测,你可以使用像 gon 这样的东西来检查gon gem它可能有帮助

相关问题