Rails 3 - 如何动态创建与param [:id]关联的html元素?

时间:2011-11-16 23:00:52

标签: javascript jquery ruby-on-rails ruby-on-rails-3 json

我正在尝试实现需要使用html5绘图画布的Rails 3应用程序。

到目前为止,我有一个Sketch支架,我已将索引显示视图修改为并排(我输入了隐藏的 div 在那里只是为了表明我计划在div中托管画布:

enter image description here

目前在 application.js 文件中,我有一个脚本,它通过Ajax请求访问show动作,并将其放在Sketches列表旁边。这是代码:

//  Show individual sketch  
$(function(){
  var $sketch_div = $('#show_sketch_div');        

  // return html instead of js
  $('a[data-remote]').live('ajax:beforeSend', function(e, xhr, settings){
    xhr.setRequestHeader('accept', '*/*;q=0.5, text/html, ' + settings.accepts.html);
  });

  // Handle sketch name links with the data-remote attribute
  $('a[data-remote]').live('ajax:success', function(xhr, data, status){
    $sketch_div
      .html(data)         
      .show();
  });    
});

此外,“草图”列表中的每个链接都有一个与之关联的类(为了使用JQuery获取它):

<td><%= link_to 'Show', sketch, :remote => true, :class => 'show_sketch_button' %></td>

我将Sketch控制器设置为渲染JSON:

  def show       @sketch = Sketch.find(params [:id])

respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @sketch }
  format.json { render :json => @sketch }
end   
     

这部分是我真正陷入困境的地方。

我计划在点击Sketch的 show 按钮时使用JQuery插入Canvas标记。但是,我不知道如何使用Javascript获取相关草图的 id 参数,然后使用它来生成仅与特定 id 相关联的Canvas元素。

我已经搜索了JSON教程,但我找不到任何似乎能解决我想要做的事情。我也是JSON的新手 - 所以我可能会错过它。

有没有人有任何想法或示例可以指向我?

1 个答案:

答案 0 :(得分:3)

如果我是对的,你想把草图对象的ID写入你的html,稍后再用JavaScript。

在link_to标记中创建“data-”html5属性。在html5中,您可以创建以“data-”开头的标签,这些标签将有效。

<%= link_to 'Show', sketch, :remote => true, :class => 'show_sketch_button', :"data-sketch-id" => sketch.id %>

在jQuery中,您可以使用$('a.show_sketch_button[data-sketch-id="<NUMBER>"]')

获取此元素

顺便说一下,我不建议使用.live事件处理。每当它发生变化时,它就会解析完整的DOM。而不是,只需使用.bind(),. unbind()&lt; ---如果你需要删除事件处理程序。