时间:2011-04-02 18:51:17

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

所以我有一个用于向视频添加主题(标签)的表单:

<%= form_for @video, :url => {:action => "update"}, :remote => true do |f| %>
  <div class="field">
  <%= f.text_field :topic_names, :class => "topic_field" %>
  </div>
  <%= f.submit "Add Topic" %>
<% end %>

但是,我希望表单最初不在那里,只有在用户点击链接后才会显示。最初我想使用以下代码从jQuery的不同文件加载表单:

$("#edit_topics_link").click(function(e){
        e.preventDefault();
        $(".topic_form").load("topic_form.html.erb");
        $("#edit_topics_link").hide();
    });

这个问题是第二个我从原始视图中删除了表单,我得到了这个JS错误:Uncaught TypeError: Cannot set property '_renderItem' of undefined

我认为这可能与表单是用AJAX请求处理的事实有关,因为我将:remote => true选项传递给它。

无论如何,由于这个错误,我想只是将表单保​​留在视图中并隐藏它,然后在用户单击链接时显示它。这是一个坏主意吗?如果我应该在表单中加载,我该如何防止JS错误?

1 个答案:

答案 0 :(得分:0)

我会加载它并在页面加载时保持隐藏状态,然后在点击时显示它。表单显示速度比对服务器的另一个请求更快,并且通过将其添加到用户可能无法显示的页面,它真正花费了多少钱?可能是毫秒级的视图加载和毫秒的http数据传输?

虽然我认为这是一种更好的方法,但值得注意的是,您的错误可能是由此形成的:

$(".topic_form").load("topic_form.html.erb");

您应该在负载内调用控制器/操作。 Jquery加载向服务器发出请求,它将调用此URL:http://yoursite.com/topic_form.html.erb。我假设路线不存在。您需要从控制器操作中呈现此表单。