【问题标题】:Refactoring Rails Controller / Views to call Javascript / jQuery重构 Rails 控制器/视图以调用 Javascript/jQuery
【发布时间】:2013-01-20 05:14:17
【问题描述】:

我目前正在尝试重构一些遗留代码。它目前是这样的:

控制器

def create
  # do stuff

  respond_to do |format|
    format.html { do stuff }
    format.js { render partial: 'stage_two', locals: { some instance variables } }
  end
end

那么在views/controller_name/_stage_two.js.erb里面有:

$('.some_element').children().fadeOut( function() {
  $('.some_element').children().remove();
  $('.some_element').html("<%=j render partial: 'form', locals: { stuff } %>");
  $('.some_element .stage_two').fadeIn();
});

所以基本上控制器动作本质上是渲染javascript。而那个特定的 javascript 只是从页面中删除一个元素,更改内容,然后将其淡入。有没有更好的方法来做到这一点?我知道javascript通常位于app/assets/javascripts

【问题讨论】:

    标签: javascript jquery ruby-on-rails refactoring


    【解决方案1】:

    您当前的实现已经非常干燥并且是标准方式。

    html 请求也应该呈现相同的部分,但具有布局。

    js请求应该渲染js响应(渲染部分)并更新页面部分。

    我知道通常 javascript 位于 app/assets/javascripts 中。

    这些是你的资产,这个stage_two.js.erb 本质上不是你的资产文件,而是你对 js 响应的操作处理。

    当然,对于较小的更新操作,您可以使用 json 请求并接收 json 响应来更新视图,但是对于许多失败的情况(尤其是处理大数据时),并且您当前的实现很好......

    【讨论】:

    • 如果我想使用 HAML 怎么办?那么就不可能像我希望的那样使用coffeescript吗?我想摆脱普通的 js/jQuery 并使用咖啡脚本。 :)
    • 您仍然可以拥有_stage_two.coffee.erb 并遵循相同的咖啡脚本语法...
    • 您可以在assets\javascripts 目录中制作部分内容吗? Rails 是否首先查看视图,然后归结为资产?
    • 但是这些不是assets..这是正在执行的动态js内容..如果你觉得需要把它干掉..创建一个js函数update_my_content()并调用@987654326 @来自.js.erb文件...
    • 哦,我想我明白你在说什么了。我真的很感激帮助。 :)
    【解决方案2】:

    通常,执行此操作的常用方法是让控制器返回 JSON(我会让它呈现变量的格式化版本),然后让 JS 执行正常的 AJAX 调用并使用JSON 数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 2018-05-28
      相关资源
      最近更新 更多