Я пытаюсь вставить частичное в диалоговое окно jQuery. Диалоговое окно работает, но не неравнодушное..
Вот мой код:
application.js
$(document).ready(function(){
$("#add_note").click(function(){
$("#notes").html("<%= escape_javascript(render(:partial => @note)) %>").dialog({title: 'Basic Dialog'})
})
})
мое представление
<div class="title">
<span>Historique :</span>
<span id="add_note">Ajouter une note</span>
</div>
<div id="notes">
</div>
мое частичное в myview / _ note.html.erb
<div class="note">
<%= form_for(@add_note) do |f| %>
<dl>
<dt>Type de note</dt>
<dd><%= f.collection_select :note_type_id, NoteType.find(:all), :id, :label, :allow_blank => "Type" %></dd>
</dl>
<dl>
<dt>Titre :</dt>
<dd><%= f.text_field :title %></dd>
</dl>
<dl>
<dt>Description :</dt>
<dd><%= f.text_field :description %></dd>
</dl>
<%= f.hidden_field :project_id, :value => @project_id %>
<%= f.hidden_field :organization_id, :value => @project.organization_id %>
<%= f.hidden_field :user_create_id, :value => current_user.id %>
<%= f.hidden_field :domain_id, :value => current_user.domain_id %>
<%= f.hidden_field :created_at %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Если бы у Вас есть подсказка, это было бы очень полезно!Спасибо
Fabien
Файл application.js
- это место для статического JavaScript. Он не передается в ERB для обработки при каждом запросе, поэтому ваш <% = code%>
никогда не запускается. Если вы укажете в браузере /javascripts/application.js
, вы поймете, о чем я говорю.
Убедитесь, что вы хорошо разбираетесь в том, как обрабатываются запросы в Rails. Возможно, вам здесь не хватает некоторых деталей. application.js
- это статический файл, который существует в каталоге / public / javascripts
, поэтому он обслуживается непосредственно вашим веб-сервером; Rails даже не трогается, когда браузер его загружает. Это похоже на то, как когда вы создаете новое приложение rails, и вам нужно стереть файл /public/index.html
, прежде чем Rails сможет обработать ваш map.root
в файле routes.rb .
У вас есть несколько вариантов:
Здесь - старый эпизод Railscast, но он кажется близким к тому, что вы ищете. Он использует контроллер с именем javascripts_controller
для генерации динамических сценариев JavaScript. Это не очень точный подход.
В этой серии метод, который Райан использует для добавления полей во вложенную модель, может быть адаптирован под ваши нужды. Я использовал этот метод несколько раз, и он очень хорошо работает.
Вы также можете вызвать действие, которое возвращает html партиала через ajax, и использовать результат в $ (# notes) .html (result)
.Быстрый поиск по rails jquery ajax
предлагает несколько руководств о том, как это реализовать ( Здесь - вариант, который кажется разумным). Здесь - еще один эпизод Railscast, посвященный jQuery и Rails 2. Я бы не рекомендовал использовать jRails на этом этапе, потому что он довольно устарел, и, как упоминается в эпизоде, это как бы побеждает цель перехода на jQuery. поскольку помощники Rails 2 генерируют навязчивый JavaScript.
Это гибкий способ делать что-то. У вас есть общий набор статического JavaScript, который используется для вызова удаленных методов. В отдельных методах контроллера вы можете response_to на эти вызовы ajax и возвращать JavaScript с динамическими данными, HTML или JSON.
Методы jQuery, которые нужно искать для ajax, перечислены в этом разделе jQuery api. $. Ajax
$. Post
и $. Get
являются основными.
Для вашего примера, $. Get
будет хорошим местом для начала. Вот пример прямо из документации api:
$.get('ajax/test.html', function(data) {
$('.result').html(data);
alert('Load was performed.');
});
Здесь - Railscast о том, как Rails 3 обрабатывает ненавязчивый JavaScript вместе с настраиваемыми атрибутами HTML5. Вы можете имитировать этот подход в Rails 2, но стандартные вспомогательные методы не будут генерировать data-remote
, data-method
, data-disable-with
или другие данные - *
атрибуты для вас. Вы можете видеть в версии jQuery Rails 3 ujs, что это больше всего похоже на предыдущий метод, о котором я упоминал, где методы контроллера вызываются с помощью $.ajax
и обрабатывать ответ по-разному в зависимости от типа данных (который по умолчанию является «скриптом».