我的计划是通过 klick 事件更新部分内容,我通过 ajax 获取一些数据。所以我打开了我的 assets/javascripts 目录并将代码放在我打算调用它的模块的 js 文件中。我设法获取数据并在 div 上调用一些“html() 或 text()”。但是当我试图打电话时
.html("<%= escape_javascript( render( :partial => 'job') ) %>")
我的控制器告诉我未知方法“渲染”。因此,我在许多其他威胁中表示资产目录不是为静态内容构建的。但现在的问题是,如果不在资产中,该放在哪里?我试图把它放在视图/模型文件夹中(与动作“显示”同名)。但它不会加载。是的,我在 show action 中告诉 Controller response_to format.js。
那么我应该把js-File放在哪里以及如何调用它呢?或者甚至有一种方法可以让它在资产目录中并且能够调用渲染?
感谢您的回答!可悲的是,我正是这样做的,但我不工作。所以这是我的代码:
/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 文件夹中,它甚至不会对点击事件做出反应。一旦我将它放在资产目录中,我就会像魅力一样工作,但不会渲染。那么我错过了什么?为什么我的 js 代码没有加载?
非常感谢你的帮助!