我正在使用Rails 4,我玩过AJAX。我成功地让它发挥作用。其上具有Ajax链接的页面是show.html.erb。它有一个有帖子的帖子,帖子有评论。为了避免加载所有内容,我使用Ajax来加载帖子列表和评论列表。就像Facebook一样。
我按以下方式组织它:页面控制器检查是否存在ajax_action
查询参数。如果是,则呈现JavaScript响应。它使用before_action
进行检查。 ajax_action
的值为load_posts
,load_comments
和load_replies
。它们映射到页面控制器中的私有方法。
当我在同一页面上需要不同的Ajax方法时,这听起来是一个好方法吗?或者你是以另一种方式做到的?
来自页面控制器的代码:
before_action :delegate_ajax, only: :show
def delegate_ajax
ajax_action = params[:ajax_action]
unless ajax_action.nil?
ajax_handlers = {'load_posts' => 'load_posts', 'load_comments' => 'load_comments'}
send(ajax_handlers[ajax_action])
end
end
def load_posts
# Some logic (hidden for now)
respond_to do |format|
format.js { render 'load_posts', layout: false }
end
end
def load_comments
# Some logic (hidden for now)
respond_to do |format|
format.js { render 'load_comments', layout: false }
end
end
至少这样做会使routes.rb无视所有AJAX路由。