当用户点击我的显示链接时,它会进入我的显示页面,在页面加载后运行javascript并渲染显示。如下所示:
...
display_data_hash = {}
function display() {
// use display_data_hash here
}
...
可以在服务器端的javascript中填充“display_data_hash”吗?或者我应该只在我的视图中添加标记并在我的html中填充display_data_hash。我真的不希望混合JavaScript与HTML。
答案 0 :(得分:1)
使用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...
}