【问题标题】:What should I do to accomplish this feature?我应该怎么做才能完成这个功能?
【发布时间】:2011-04-02 18:51:17
【问题描述】:

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

<%= 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 =&gt; true 选项传递给它。

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

【问题讨论】:

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


    【解决方案1】:

    我会加载它并在页面加载时将其隐藏,然后在他们单击时显示它。该表单的显示速度比向服务器发出另一个请求要快,而将其添加到用户可能不会显示它的页面中,您的实际成本是多少?可能是一毫秒的视图加载和一毫秒的 http 数据传输?

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2021-04-27
      相关资源
      最近更新 更多