我的 Rails 应用程序存在大量 AJAX 设计问题。要了解 APP - 您有一个可以注册的课程列表。它以前都是 HTML,但我想重写它并在其中放入一些 AJAX。它看起来很像图片中的:
主表是类列表。蓝色按钮表示“注册课程”,红色表示“退出”,绿色表示正在处理 AJAX 请求。在左上角有一个搜索表格。显然它有效(我的意思是搜索,我希望它通过 AJAX -> 刷新类工作。左侧列表显示您登录的所有类。
我有一个很大的设计问题。似乎我知道如何分别实现所有 ajax 操作,但是当我尝试将它们全部组合起来时,一切都搞砸了。没有关于如何做到这一点的全面教程,不是吗?我尝试使用 jquery。
控制器称为wyklads,动作wyklady 所以这就是我所拥有的:
0. 布局
<div class="span3">
<div class="row-fluid">
<div class="well wyszukiwarka">
<%= render 'search'%> #search form
</div>
<div class="well usuwanie">
<%= render 'usuwanie' %> #left list of my classes
</div>
</div>
</div>
<div class="span9">
<%= render 'wyklady' %> #table of classes
</div>
1. 搜索
application.js
$('div.wyszukiwarka form input.btn').submit(function() {
$.get($this.action, $(this).serialize(), null, "script");
return false;
});
the table with classes is refreshed because of wyklady.js.erb that loads automatically
$('div.tab-przedmioty').html("<%= escape_javascript(render('wyklady')) %>");
2. 控制器
def wyklady
if params[:search]
@wyklads = Wyklad.where(:pozstudiow => poziom, :typo => 1).search(params[:search])
@labs = Lab.where(:pozstudiow => poziom, :typo => 1).search(params[:search])
else
@wyklads = Wyklad.where(:pozstudiow => poziom, :typo => 1)
@labs = Lab.where(:pozstudiow => poziom, :typo => 1)
end
end
3. 用于添加类的按钮(我使用的是 twitter 引导程序)
<%= button_to 'Dodaj do planu', {:controller => :plans, :action => :create, :przedmiot_id => wyklad.id, :typ => 0}, :method => :post, :remote => true, :class => 'btn btn-small btn-primary addprzedmiot-btn', :style => 'padding: 2px 5px; margin: 0; width: 90px;', :"data-toggle" => 'button', :"data-loading-text" => 'Dodano' %>
起初我试图从 jquery中放入wyklady.js.erb条件状态:
$('.addprzedmiot-btn').click(function() {
$('div.tab-przedmioty').html("<%= escape_javascript(render('wyklady')) %>");
});
然后我试图从计划控制器执行js(当你注册一个类时,你会创建一个新计划):
in Plans controller
def create
...
if @plan.save
respond_to do |format|
format.js
end
end
and plans/create.js.erb
$('div.usuwanie').html("<%= escape_javascript(render('wyklads/usuwanie')) %>");
但它说它没有在左侧呈现列表,在日志中说它缺少来自 Wyklads 控制器的一些对象(nil 类)。
唯一可行的解决方案是每次调用后都通过 ajax 刷新所有内容,这是非常无效的。我想避免它,因为类表很长,并且需要大量时间来填充它。
我希望这一切都表现得像这样: 1.只有在您提交搜索时才会刷新课程表,2.当您注册课程时蓝色按钮变为绿色(表示按下按钮,由引导程序处理得很好),列出左侧刷新,但右侧的表格不再填充一次。刷新整个页面后,绿色按钮变为红色。
所以这个问题有点宽泛。如果有人能如此耐心地解释解决方案以及解释混合多个 ajax 事件并处理它们的一些关键概念(或给出一些建议、教程),我将非常感激。纯代码不如概念重要。在那之后,我想再“ajaxify”一点,但首先必须了解基础知识。
非常感谢。