我的计划是通过klick事件更新部分,我通过ajax获取一些数据。 所以我打开了我的assets / javascripts目录,并将代码放在我计划调用的模块的js文件中。我设法获取数据并在div上调用一些“html()或text()”。但是一旦我试着打电话
.html("<%= escape_javascript( render( :partial => 'job') ) %>")
我的控制器告诉我未知方法“渲染”。所以我在许多其他威胁中都认为资产目录不是为静态内容构建的。 但现在问题是,如果不是资产,应该把它放在哪里? 我试图将它放在view / model文件夹中(与aktion'show'同名)。但它不会加载。是的我在show action中告诉控制器,以回复format.js。
那么我应该在哪里放置js-File以及如何调用它?或者是否有一种方法可以将它放在assets-directory中并且可以调用render?
感谢您的回答!可悲的是,我确实做到了,但我没有工作。所以这是我的代码:
/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文件夹中,它甚至不会对点击事件做出反应。一旦我将它放在assets目录中,我就像一个魅力,但不会渲染。 那我错过了什么?为什么我的js Code没有加载?
非常感谢你的帮助!
答案 0 :(得分:1)
一般来说,对于这种事情,我会将其命名为特定操作,例如show.js.erb
,然后在控制器中使用format.js。如果您使用的是coffeescript,则需要将其命名为show.js.coffee.erb
。如果这不起作用,您可以发布设置此onclick事件的视图代码吗?
使用show javascript代码进行编辑
因为你正在使用show动作,所以应该能够这样做:
= link_to "Show", @event, :remote => true, :format => :js
根据需要调整事件变量,但它应该可以正常工作