8

我正在尝试从 Rails 3.2 应用程序中的控制器调用 javascript 函数(实际上是咖啡脚本)。

我收到一个Render and/or redirect were called multiple times in this action错误。

我的代码如下所示:

#Model.controller

def index
  @models = Model.all
  my_action if current_user.name == "Bob" #or some other general conditional
  ...and some stuff
  respond_to do |format|
    format.html
    format.js #this is needed to handle ajaxified pagination
  end
end

def my_action
  respond_to do |format|
    format.js { render :js => "my_function();" } #this is the second time format.js has been called in this controller! 
  end
end


#functions.js.coffee.erb

window.my_function = ->
  i = xy
  return something_amazing

从控制器调用 js 函数的正确方法是什么?

4

1 回答 1

13

伙计,你错过了阻止的争论。主要错误。

def my_action
  #respond_to do # This line should be
  respond_to do |format|
    format.js { render :js => "my_function();" }
  end
end

Yoshiji 先生的观点是正确的。但是您的错误发生在服务器端,尚未到达客户端。

对于风格,我认为如果 js 代码只是一个函数调用就可以了。如果更多的js代码,最好渲染js模板

 # controller
 format.js

 # app/views/my_controller/my_action.js.erb
 my_function();
 // and some more functions.

更新:如何解决双重渲染问题

如果条件满足,您必须返回 #index,否则该方法将继续执行并导致渲染两次或更多次。像这样修复它:

def index
  @models = Model.all
  if current_user.name == "Bob"
    return my_action
  else
    # ...and some stuff
    respond_to do |format|
      format.html
      format.js #this is needed to handle ajaxified pagination
  end
end
于 2013-05-22T17:00:57.637 回答