在我的Rails项目中,我试图在控制器响应(create.js.erb)中通过JS更改实例变量,然后重新加载使用实例变量的HTML元素。但它不起作用。可能吗?这只是一个例子。
我还想显示新创建的对象。但由于我似乎不理解在rails和JS之间交换信息的机制,我想在这里保持简单。
vocabs-controller.rb
def new
@user = current_user
@vocab = @user.vocabs.build
@vocabs = @user.vocabs.all
@count = @vocabs.count
.
.
end
def create
@user = current_user
@vocab = @user.vocabs.build(vocab_params)
@count = @user.vocabs.count
.
.
respond_to do |format|
format.html do
redirect_to new_user_vocab_path(@user)
flash[:success] = "Vocab created!"
end
format.js {render :layout=>false}
end
else
respond_to do |format|
format.html {render 'vocabs/new'}
format.js
end
end
new.html.erb(从这里我调用控制器创建动作)
<div class="panel-body">
<%= form_for(@vocab,
url: user_vocabs_path(@user),
method: :post, remote: true) do |f| %>
.
.
.
<%= f.submit "Add", class: "btn btn-large btn-primary" %>
<% end %>
<h4>
<%= @count %> Vocabs in your collection
</h4>
<%= link_to "(Show)", "#", id: "show_link" %>
<%= link_to "(Hide)", "#", id: "hide_link" %>
<ul class='vocabs <%= @vocabs_class %>'>
<% @vocabs.each do |vocab| %>
<%= render vocab %>
<% end %>
</ul>
<hr>
<%= link_to "Back", home_user_path(@user) %>
</div>
.
.
create.js.erb
<% @count+=1 %>
$('h4').load();
服务器识别出我发出了JS请求,并且还使用200 OK呈现create.js.erb
。但是.load()函数似乎没有用新数据重新加载h4-Element。
当我尝试.load()包含公式字段的div元素时,这些也没有更新。文本输入仍然可见。
进一步的问题:我在哪里可以调试JS Controller响应中的代码?我无法在Chrome的开发工具和Rails的服务器输出中找到它们。
答案 0 :(得分:0)
如果我正确关注您,请尝试
将{id}属性添加到h4
:
<h4 id="count-header">...</h4>
在.erb.js
回调中:
$('#count-header').text('<%= @count += 1 %> Vocabs in your collection');