Правильное место для Js для рендеринга партиала в Rails

Мой план состоял в том, чтобы обновить частично через событие клика, где я получаю некоторые данные через ajax. Итак, я открыл свой каталог assets/javascripts и поместил код в файл js модуля, для которого я планировал его вызвать. Мне удалось получить данные и вызвать некоторые «html() или text()» в div. Но как только я попытался позвонить

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

мой контроллер сказал мне неизвестный метод «рендеринга». Поэтому я заметил во многих других угрозах, что каталог ресурсов не был создан для статического контента. Но теперь встает вопрос, куда его девать, как не в активы? Пробовал класть в папку view/model (с тем же названием что и у действия 'show'). Но он не загружался. Да, я сказал Контроллеру в действии show для response_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

/приложение/контроллеры/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 не загружается?

Спасибо большое за вашу помощь!


person Jan    schedule 11.09.2012    source источник


Ответы (1)


Как правило, для такого рода вещей я назову его так же, как конкретное действие, например show.js.erb, а затем использую format.js, как у вас в контроллере. Если вы используете coffeescript, его нужно назвать show.js.coffee.erb. Если это не сработает, можете ли вы опубликовать код своего представления, где настроено это событие onclick?

Редактировать для использования кода show javascript

Поскольку вы используете действие show, вы должны просто сделать это:

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

Настройте переменную события там, как вам нужно, но это должно работать

person agmcleod    schedule 11.09.2012
comment
Большое спасибо за ваш ответ! К сожалению, я делаю именно так, и это не работает, скорее всего, я что-то упускаю. - person Jan; 12.09.2012
comment
Все еще не исправляет это для меня. Даже если я изменю его на файл плана .js (или js.erb), он не загружается и ничего с ним не делает. Даже когда я пытаюсь выполнить что-то вроде: $('.position').click(function() { return alert('Testing'); }); Что может сказать RoR не загружать его? - person Jan; 12.09.2012
comment
Если бы вы лучше посмотрели на свой код, где вы пытаетесь загрузить этот файл js? Вы упомянули событие клика, можете ли вы опубликовать код, содержащий это событие клика? Спасибо. - person agmcleod; 13.09.2012
comment
Я пытаюсь загрузить его с помощью этого /app/views/events/show.js.erb.coffee (см. Код ниже), но даже если я просто сделаю событие щелчка, как опубликовано до того, как ничего не произойдет. Так что я предполагаю, что загрузочная часть - это проблема! Где я могу указать Rails включить этот js на этой стороне? - person Jan; 13.09.2012