【发布时间】:2014-08-04 06:15:29
【问题描述】:
我有一个显示运动队的视图。当您单击一个团队时,一个信息选项卡会通过 ajax 填充时间表、花名册等,它会调用控制器来处理对外部 API 或本地数据库的调用(取决于要显示的数据)。然后,ajax 通过一个咖啡脚本文件使用返回的数据呈现一个部分。
到目前为止,一切都很好——但是咖啡脚本中返回的部分永远不会被执行。您可以在此处看到一个带有部分返回的确切 js 的 jsfiddle:http://jsfiddle.net/43XAQ/1/
coffeescript 文件如下所示:
$(document).ready -> // same issue with or without the document.ready
<% @poll.each do |p| %>
$ = jQuery; // tried with and without this line-- no change
$('#poll_body').append("<%= j render(partial: 'poll/place', locals: { place: p }) %>")
<% end %>
它正在加载的视图有一个简单的表格,就像上面的小提琴一样。
我认为是 turbolinks 造成的,因为我在其他 js 元素上也遇到过这个问题——但我安装了jquery-turbolinks gem,它解决了其他问题,但没有解决这个问题。完全相同的代码在 jsfiddle 中效果很好,但在我的本地站点中却不行。所以我认为这与 Rails 如何加载 js 有关?
编辑:是的,我使用开发工具查看返回的内容。抱歉,如果不清楚 - 这正是我在上面链接的小提琴中粘贴为 js 组件的内容:
(function() {
var $;
$ = jQuery;
return $('#poll_body').append("<tr>\n <td>10<\/td>\n <td><a href=\"/team/236\">Oklahoma State Cowboys<\/a><\/td>\n <td>AP Poll<\/td>\n <td>3<\/td>\n <\/tr>");
});
}).call(this);
编辑2:
还有几点:
1) 如果我在 coffescript 文件中除了警报或控制台日志之外什么都不做,它仍然什么都不做。
2) 对调用咖啡脚本的控制器的实际调用是一个标准的 jQuery click 事件。在投票视图中加载了一个polls.js 文件,它执行以下操作:
$( document ).ready(function() {
$('#poll').on('click', '.poll-item', function(){
doActive(this);
current_team = this.id;
});
});
// snip //
var doActive = function(el){
// some other stuff
getNews(current_team); // calls a webservice via ajax, works fine.
getRoster(current_team); // calls a webservice via ajax, works fine.
getPolls(current_team); // calls the controller via ajax, returns coffeescript properly, coffeescript never gets executed
}
【问题讨论】:
-
你有没有使用开发者工具直接查看返回的内容?
-
因为它是一个 ajax 调用,因此您应该查看开发人员控制台是否调用了 ajax 请求,如果它被调用,那么是否有任何错误?如果没有任何错误,请在您的咖啡脚本文件中尝试一个简单的警报
-
删除你的
document.ready。这不是必需的。如果出现错误,通常 JS 不会执行。检查您使用的选择器是否正确。还要在 JS 行的末尾加上分号。它应该工作。尝试输入 alert() 来检查它是否工作 -
@noel——是的,我使用了开发者工具。请在上面查看我的编辑。
-
@Aravind——我添加了分号和警告。控制台或日志中没有报告错误,但行为没有变化。什么都没有。
标签: jquery ruby-on-rails ruby-on-rails-4 coffeescript