在jquery对话框中使用rails部分

时间:2010-06-23 07:43:16

标签: jquery ruby-on-rails ruby-on-rails-3

我正在尝试将部分插入到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 个答案:

答案 0 :(得分:10)

application.js文件是静态JavaScript的地方。它不会传递给ERB以便对每个请求进行处理,因此您的<%= code %>永远不会运行。如果您将浏览器指向/javascripts/application.js,您将会看到我正在谈论的内容。

确保您能够很好地处理如何在Rails中处理请求。您可能在这里遗漏了一些细节。 application.js是一个存在于/public/javascripts目录中的静态文件,因此它由您的Web服务器直接提供;当浏览器获取Rails时,Rails甚至不会被触及。就像你创建一个新的rails应用程序一样,你必须在Rails处理routes.rb文件中的/public/index.html之前删除map.root文件。

您有几种不同的选择:

Here是一个较旧的Railscast剧集,但它似乎接近你正在寻找的。它使用名为javascripts_controller的控制器来生成动态javascripts。这不是一个非常精细的方法。

this episode中,Ryan用于为嵌套模型添加字段的方法可以根据您的需要进行调整。我已经使用过这种方法几次了,效果很好。

推荐方法

您还可以通过ajax调用返回partial的html的操作,并将结果用于$(#notes).html(result)。对rails jquery ajax的快速搜索提供了一些有关如何实现这一点的指南(Here似乎是合理的)。 Here是另一个处理jQuery和Rails 2的Railscast剧集。我不建议在这一点上使用jRails,因为它已经过时了,正如剧集所提到的那样,它有点挫败了切换到jQuery的目的。 Rails 2助手生成突兀的JavaScript。

这是一种灵活的做事方式。您有一组用于调用远程方法的通用静态JavaScript。在单个控制器方法中,您可以respond_to这些ajax调用并使用动态数据,html或JSON返回JavaScript。

jQuery中查看ajax的方法列在jQuery api的this section中。 $.ajax $.post$.get是主要的。

对于您的示例,$.get将是一个很好的起点。以下是api文档中的一个示例:

$.get('ajax/test.html', function(data) {
  $('.result').html(data);
  alert('Load was performed.');
});

Here是关于Rails 3如何处理不引人注目的JavaScript以及HTML5自定义属性的Railscast。您可以在Rails 2中模仿这种方法,但标准辅助方法不会为您生成data-remotedata-methoddata-disable-with或其他data-*属性。您可以在Rails 3 ujs的jQuery version中看到,它与我之前提到的使用$.ajax调用控制器方法的方法最相似,并根据dataType(即'脚本'默认。

答案 1 :(得分:2)

我也一直试图这样做,偶然发现了这个解决方案:

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

可能更容易实施

答案 2 :(得分:2)

在我查看Rails演员和文档之后,我最好通过查看真实世界的示例并将其调整到我需要的内容。所以如果你去Ajax路线(Awgy建议的那样)并想要更多的例子,那么除了InfectiouSoul的链接(来自同一站点)之外,这里还有一个链接,这个链接显示了一个使用ajax请求的对话框的例子。

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