我有一个能够展示运动队的观点。当您单击一个团队时,信息选项卡会通过ajax填充计划,名单等,该控制器会调用控制器来处理对外部API或本地数据库的调用(取决于要显示的数据)。然后ajax通过coffeescript文件使用返回的数据呈现部分。
到目前为止,它的工作效果都很好 - 但是咖啡因中返回的部分内容从未被执行过。您可以在这里看到一个jsfiddle,其中包含部分返回的确切js: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);
EDIT2:
还有几点:
1)如果我在coffescript文件中没有做任何事情,除了警报或控制台日志,它仍然没有做任何事情。
2)对调用coffeescript的控制器的实际调用是标准的jQuery单击事件。在poll视图中加载了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
}
答案 0 :(得分:1)
如果是AJAX响应,则不需要$(document).ready()。页面首次加载时会触发,但我相信每次收到回复时都不会再次触发。
答案 1 :(得分:1)
令人难以置信,但显然问题是调用控制器操作的jQuery ajax
函数默认为dataType: 'json'
- 这使得一切都按设计工作,但由于数据(可能)是作为json
而不是js
返回,咖啡因没有被解雇。
我重写了所有js
行动,因为我已经完成了我能想到的所有其他事情,而且似乎已经解决了这个问题。
感谢大家的想法和帮助。
答案 2 :(得分:0)
<强> Turbolinks 强>
问题可能在于turbolinks
,因为您尝试使用$(document).ready
呈现anonymous function
,typically fails with turbolinks
我不知道这是否是实际问题,但您可能希望看一下使您的代码更加“涡轮连接友好”:
#-> I hope you have `.erb`appended to this file - otherwise @polls won't owrk
polls ->
<% @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 %>
$(document).on "page:load ready", polls
编辑 - 正如我刚才读到的那样,你认为问题出在Turbolinks上,你可能希望忽略我上面的建议(虽然我会留下他们的想法)