如何在不使用ID的情况下在.js.erb文件中使用$(this)(Ruby on Rails)

时间:2014-07-01 00:38:59

标签: jquery ruby-on-rails

我有一个动态生成的课程列表' book'。部分看起来像这样:

_book.html.erb:

<div class="book">
    <%= link_to "edit", edit_book_path(book), remote: true %>

    <div class="content">
        <%= link_to book.title, book.link %> 
    </div>

    <div class="editform" style="display:none"></div>
</div>

books_controller:

def edit
    @book = Book.find(params[:id])
    respond_to do |format|
        format.html
        format.js
    end
end

这就是我想要做的:我想得到名为edit的链接的父div,然后更改其子类。显然$(这个)不起作用。

3年前有人问the same question,所有回复都说要使用ID。我真的不想在edit.js.erb中通过ID引用特定元素,因为它们是动态生成的(如果必须,我可以这样做,但我确定在那里&#39; sa很好的方式来做到这一点)。

books / edit.js.erb(不工作)

var $bookdiv = $(this).parent();
$bookdiv.find('.editform').html("<%= escape_javascript(render 'books/formBookFull', book: @book)%>");
$bookdiv.find('.editform').show();
$bookdiv.find('.content').hide();

有没有一个很好的方法来做这个或一个不错的选择?我也尝试将其作为一个onclick函数直接作为临时黑客,但即使这样也没有用,因为jquery由于某种原因没有在部分工作。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您应该使用您的记录ID,HTML5 data属性完全针对此类情景制作

_book.html.erb:

<div class="book" data-id="<%= book.id %>">
    <%= link_to "edit", edit_book_path(book), remote: true %>

    <div class="content">
        <%= link_to book.title, book.link %> 
    </div>

    <div class="editform" style="display:none"></div>
</div>

edit.js.erb

var $bookdiv = $('div.book[data-id="<%= @book.id %>"]');
$bookdiv.find('.editform').html("<%= escape_javascript(render 'books/formBookFull', book: @book)%>");
$bookdiv.find('.editform').show();
$bookdiv.find('.content').hide();