1

私の計画は、ajax を介してデータを取得する klick-event を介してパーシャルを更新することでした。そこで、assets/javascripts ディレクトリを開き、呼び出す予定のモジュールの js ファイルにコードを入れました。データを取得し、div で "html() または text()" を呼び出すことができました。でも、電話しようとしたらすぐに

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

私のコントローラーは、未知のメソッド「render」を教えてくれました。そのため、資産ディレクトリが静的コンテンツ用に構築されていないという他の多くの脅威を指摘しました。しかし、アセットにない場合、どこに置くべきかという問題が生じます。ビュー/モデルフォルダー(アクション「ショー」と同じ名前)に入れようとしました。しかし、それはロードされません。はい、show アクションでコントローラに、respond_to 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 フォルダーに配置すると、クリック イベントに反応しなくなることです。アセット ディレクトリに配置するとすぐに、魅力的に動作しますが、レンダリングされません。それで、私は何が欠けていますか?js コードがロードされないのはなぜですか?

助けてくれてどうもありがとう!

4

1 に答える 1

1

一般的に、この種のことについては、などの特定のアクションと同じ名前を付けてからshow.js.erb、コントローラーにあるformat.jsを使用します。Coffeescriptを使用している場合は、という名前を付ける必要がありますshow.js.coffee.erb。これが機能しない場合は、このonclickイベントが設定されているビューのコードを投稿できますか?

showjavascriptコードを使用するために編集します

showアクションを使用しているので、これを実行できるはずです。

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

必要に応じてそこでイベント変数を調整しますが、機能するはずです

于 2012-09-11T17:36:58.600 に答える