Используя направляющие, неравнодушные в диалоговом окне jQuery

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

8
задан Fabien 23 June 2010 в 07:43
поделиться

1 ответ

Файл 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 и обрабатывать ответ по-разному в зависимости от типа данных (который по умолчанию является «скриптом».

10
ответ дан 5 December 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: