2011-04-02 145 views
0

所以我有一個形式,是用於添加主題(標籤)到視頻:我應該怎麼做才能完成此功能?

<%= 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錯誤?

回答

0

我會加載它並在頁面加載時保持隱藏狀態,然後單擊時顯示它。表單會比向服務器發出另一個請求更快,並且將其添加到用戶無法顯示的頁面會導致什麼成本?大概是一個毫秒的視圖加載和一個毫秒的http數據傳輸?

雖然我認爲這是一個更好的方法及其值得注意的是,你的錯誤可能是造成這一形式:

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

你應該調用負載內部控制器/動作。 Jquery負載向服務器發出請求,它將調用以下URL:http://yoursite.com/topic_form.html.erb。我假設路線不存在。您需要從控制器操作中呈現此表單。

相關問題