2012-09-11 30 views
1

我的計劃是通過一個klick-event來更新部分,我通過ajax獲取一些數據。 所以我打開我的assets/javascripts目錄,並將代碼放在我計劃打開的模塊的js文件中。我設法獲取數據並在div上調用一些「html()或text()」。但只要我試圖呼叫Js在Rails中渲染一個部分的正確位置

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

我的控制器告訴我未知的方法「渲染」。所以我在許多其他威脅中發現,資產目錄不是爲靜態內容構建的。 但現在問題出在哪裏,如果不是在資產? 我試圖把它放在view/model文件夾中(與'show'的名字相同)。但它不會加載。是的,我告訴控制器在show action中對respond_to format.js。

那麼,我應該把js文件放在哪裏以及如何調用它?還是有甚至有一種方法讓它在資產目錄中,並且能夠調用渲染?


感謝您的回答!可悲的是我做到了,但我沒有工作。因此,這裏是我的代碼:

/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文件夾中,它甚至不會對click事件做出反應。只要我把它放在資產目錄中,我就像魅力一樣工作,但不會渲染。 那麼我錯過了什麼?爲什麼我的js代碼沒有被加載?

非常感謝您的幫助!

回答

1

通常對於這類事情,我會將它命名爲與某個特定操作相同,如show.js.erb,然後像在控制器中那樣使用format.js。如果您使用咖啡標記,則需要命名爲show.js.coffee.erb。如果這不起作用,您可以發佈您的視圖的代碼,在這個onclick事件設置?

編輯使用Show JavaScript代碼

因爲你使用show動作,就應該能夠做到這一點:

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

調整事件變量存在,因爲你需要,但它應該工作

+0

非常感謝您的答案!可悲的是我做到了這一點,它不工作,很可能我錯過了一些東西。 – Jan

+0

仍然不適合我。即使我將其更改爲計劃.js文件(或js.erb),它也不會加載或對其執行任何操作。即使當我嘗試執行如下的命令時:$('。position')。點擊(功能(){ \t return alert('Testing'); });什麼能告訴RoR不加載它? – Jan

+0

有更好的看看你的代碼,你在哪裏試圖加載這個js文件?你提到了一個點擊事件,你能發佈包含這個點擊事件的代碼嗎?謝謝。 – agmcleod