我对cofeescript或js不太自信,所以我有点困惑。我有一个快速编辑功能,它发送一个AJAX请求并更新数据库。目前我正在手动更改编辑过的地方并显示它,但它看起来像是骗子,徽章不会更新!我想重新呈现我的具体帖子。我已经给了<li>
一个data-id
属性,所以我可以通过Post.find($(#li).data('id'))
得到它的帖子(不太确定它是否有效但是应该有一种传递变量的方法。现在主要的问题是我的帖子/ index.js.erb上有其他脚本,我不想被执行。我只想要一个与此相关的部分在AJAX成功时执行(在另一个文件中)或{ {1}}。现在我不知道如何实现这个目标!这听起来像是一个简单的问题,但是我对如何处理所有其他脚本以及限制部分脚本的知识缺乏限制。
编辑有关如何从另一个coffeescript或js文件调用我的index.js.erb的任何建议?或者发送参数并在该文件中使用它们?
答案 0 :(得分:3)
如果在onchange事件上执行此Ajax,那么您将传递一个值,以后可以在.js.erb文件上进行评估。例如:
让我们说事件发生在text_field_tag
的onchange上<%= text_field_tag(:for_event, "", :onchange=> "TheAjax('identifier')") %>
然后声明一个函数(本例中为TheAjax)
<script>
function TheAjax(identifier){
var dataString = 'the_id='+identifier;
$.ajax(
{
type: "GET",
url: "/your_view_name/your_method",
data: dataString
});
return false;
}
</script>
Ajax将传递一个名为“the_id”的参数,其值为“identifier”(当您在onchange方法中调用该函数时,该值将作为参数传递。
现在,在你的js.erb文件中(应该链接到你的一个控制器方法,例如show方法,你可以评估“the_id”参数的值,然后决定要采取的操作。)例如:
(在控制器中显示方法)
def show
@my_identifier = params[:the_id] (session var so you'd access it on your js.erb file)
end
您的js.erb文件
<% case @my_identifier %>
<% when 'identifier' %>
Here you put whatever part of your JS you want to execute ONLY when the condition is met.
<% else %>
Whatever else you want to execute when the previous conditions are not met
<% end %>
另请注意,如果要处理数据库更新,还可以在控制器中执行“大小写”操作,并在满足条件时管理数据库更改。