javascript - Js 在 Rails 中渲染部分的正确位置

标签 javascript ruby-on-rails ajax render renderpartial

我的计划是通过 klick-event 更新部分内容,我通过 ajax 获取一些数据。 因此,我打开了 asset/javascripts 目录,并将代码放入我计划调用它的模块的 js 文件中。我设法获取数据并在 div 上调用一些“html() 或 text()”。但当我尝试打电话

.html("<%= escape_javascript( render( :partial => 'job') ) %>")

我的 Controller 告诉我未知的方法“渲染”。因此,我发现了许多其他威胁,即 Assets 目录不是为静态内容构建的。 但现在的问题是,如果不放在 Assets 中,该放在哪里呢? 我尝试将其放入 View /模型文件夹中(与操作“show”同名)。但它无法加载。是的,我在显示操作中告诉 Controller respond_to format.js。

那么我应该把js-File放在哪里以及如何调用它?或者是否有一种方法可以让它进入 Assets 目录并能够调用渲染?

<小时/>

谢谢您的回答!可悲的是,我确实这么做了,但我不工作。这是我的代码:

/app/views/events/show.js.erb.coffee:

$(document).ready ->
  url = window.location
  url = String(url).split('/')
  event_id = url[$.inArray( "events" , url) + 1]
  $('.position').click ->
    position_id = $(this).attr("id")
    $.ajax '/events/'+event_id+'/eventpositions/'+position_id+'/eventjobs'
      dataType: 'json'
      success: (result)->
        $( '#'+position_id ).find('.jobs').html("<%= escape_javascript( render( :partial => 'job') ) %>")
        alert result[1].job_id

/app/views/events/show.html.haml:

%p#notice{:xmlns => "http://www.w3.org/1999/html"}= notice
%p
  %b Name:
  = @event.name
  \ 
  %b Plz:
  = @event.plz
%p
  %b Personal:
  - @eventpositions.each do |p|
    .position{:id => "#{p.id}"}
    %b
      Position: #{Position.find(p.position_id).name} Anzahl: #{p.quantity} Aufträge: #{p.eventjobs.all.count}
    .jobs

  = link_to 'Neuer Auftrag', new_event_eventposition_eventjob_path(@event.id,p.id)
  %br
  %br
= link_to 'Neue Position', new_event_eventposition_path(@event.id)
= link_to 'Edit', edit_event_path(@event)
|
\#{link_to 'Back', events_path}

/app/views/events/_job.html.haml:

.jobs
  - eventjobs.each do |j|
    User: #{User.find(Job.find(j.job_id).user_id).email}
    %br

/app/controllers/events_controller.rb:

def show
  @agency = Agency.find(current_agent.agency_id)
  @event = @agency.events.find(params[:id])
  @eventpositions = @event.eventpositions.all

  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @event }
    format.js
  end
end

因此,该代码无需 JavaScript 即可运行。所有渲染都很好。但我现在的主要问题是,如果我将其放在 app/views/events 文件夹中,它甚至不会对单击事件使用react。一旦我将它放入 Assets 目录中,我就会像魅力一样工作,但不会渲染。 那么我错过了什么?为什么我的 js 代码没有加载?

非常感谢您的帮助!

最佳答案

一般来说,对于这种事情,我会将其命名为与特定操作相同的名称,例如 show.js.erb,然后像在 Controller 中一样使用 format.js 。如果您使用的是 Coffeescript,则需要将其命名为 show.js.coffee.erb。如果这不起作用,您可以发布设置此 onclick 事件的 View 的代码吗?

编辑以使用显示 JavaScript 代码

因为您正在使用显示操作,所以应该能够执行以下操作:

= link_to "Show", @event, :remote => true, :format => :js

根据需要调整事件变量,但它应该可以工作

关于javascript - Js 在 Rails 中渲染部分的正确位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12374446/

相关文章:

javascript - 未捕获的类型错误 : Cannot read property 'split' of undefined

javascript - 从父对象创建具有相同属性值的子对象

javascript - Angular CLI - 图像在 'ng build' 之后不显示

javascript - php Curl - JS 刷新 API 获取调用

ruby-on-rails - 如何使 acts_as_list 与分组一起工作

ruby-on-rails - 仪表板的Rails Controller 设计模式

javascript - SVG 动画变量值的不透明度

ruby-on-rails - 如何覆盖模型验证模型中的错误消息

javascript - Ajax 代码未执行

javascript - 使用 jQuery.ajax 请求将对象数组发送到 PHP 函数