如何动态填充javascript数据结构

时间:2011-05-12 18:43:31

标签: ruby-on-rails-3

当用户点击我的显示链接时,它会进入我的显示页面,在页面加载后运行javascript并渲染显示。如下所示: ... display_data_hash = {}

function display() { // use display_data_hash here } ...

可以在服务器端的javascript中填充“display_data_hash”吗?或者我应该只在我的视图中添加标记并在我的html中填充display_data_hash。我真的不希望混合JavaScript与HTML。

1 个答案:

答案 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...
}