当用户单击"我的显示"链接时,它会转到"我的显示"页面,JavaScript在页面加载后运行并呈现显示。 如下所示:
...
display_data_hash = {}
function display() { // use display_data_hash here } ...
是否可以在服务器端的JavaScript中填充"display_data_hash"? 或者我应该在我的视图中添加标签并在我的 HTML 中填充display_data_hash。 我真的不想将JavaScript与HTML混合使用。
使用 AJAX 的第一种方法
您可以使用 AJAX(此处为 jQuery)检索display_data_hash,如下所示:
$.getJSON('/yourcontroller/youraction.json', function(data) {
display(data);
});
在控制器中,您可以呈现一个 JSON 响应,如下所示:
class YourController < ApplicationController
def your_display_action
@my_data = .....
respond_to do |format|
format.json{ render :json => @my_data }
end
end
end
没有 AJAX 的第二种方法
如果您不想触发 AJAX 请求,您可以执行以下操作:
在布局视图中添加一个部分:
<html>
<head>
....
<script type="text/javascript">
<%= yield :inline_js %>
</script>
....
</head>
<body>
....
</body>
</html>
然后创建一个帮助程序方法,如下所示:
def insert_display_data(display_data) {
# convert hash to json
data_json = display_data.to_json
content_for :inline_js do
"display('#{data_json}');"
end
}
在你的显示JavaScript函数中,做:
function display(data) {
if(data instanceof String) {
// parse JSON using jquery
data = $.parseJSON(data);
}
// your code...
}