0

我有一个数组@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>
4

3 回答 3

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你的视图中使用?

于 2012-10-15T17:04:40.560 回答
1

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

于 2012-10-15T17:29:48.973 回答
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 check out gon gem 它可能会有所帮助

于 2012-10-15T17:04:57.723 回答