Использование частичного рельсов в диалоговом окне jquery - PullRequest
8 голосов
/ 23 июня 2010

Я пытаюсь вставить частичное в диалоговое окно 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 %>

Если у вас есть подсказка, это было бы очень полезно! Спасибо

Фабьен

Ответы [ 3 ]

10 голосов
/ 23 июня 2010

Файл application.js - это место для статического JavaScript. Он не передается в ERB для обработки каждого запроса, поэтому ваш <%= code %> никогда не запускается. Если вы укажете свой браузер на /javascripts/application.js, вы увидите, о чем я говорю.

Убедитесь, что вы хорошо разбираетесь в том, как обрабатываются запросы в Rails. Вы можете упустить некоторые детали здесь. application.js - это статический файл, который существует в каталоге /public/javascripts, поэтому он обслуживается непосредственно вашим веб-сервером; Rails даже не трогается, когда браузер выбирает его. Это похоже на то, как когда вы создаете новое приложение rails и вам нужно стереть файл /public/index.html, прежде чем Rails сможет обработать ваш map.root в файле rout.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 перечислены в этом разделе API jQuery. $.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 или другие data-*. В jQuery версии Rails 3 ujs вы можете видеть, что это больше всего похоже на предыдущий метод, о котором я упоминал, когда методы контроллера вызываются с $.ajax и обрабатывают ответ по-разному в зависимости от dataType (который является 'script' по умолчанию.

2 голосов
/ 28 февраля 2011

После того, как я посмотрел на приведения и документацию по Rails, я лучше всего подхожу к этому, рассматривая примеры из реального мира и настраивая то, что мне нужно. Так что, если вы идете по маршруту Ajax (что предложил Awgy) и хотите получить больше примеров, то здесь есть ссылка в дополнение к ссылке InfectiouSoul (с того же сайта), на которой показан пример диалога с использованием запроса ajax.

http://jenwendling.com/fancy-forgot-password-with-jqueryui-and-rails/

2 голосов
/ 04 сентября 2010

Я тоже пытался это сделать и наткнулся на это решение:

http://jenwendling.com/quick-clean-modal-form-dialogs-w-jquery-eeeee/

может быть проще реализовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...