2

嘿,這是我第一次真正寫完一個問題而沒有在這個過程中給我答案。 :)Prototype動態添加的HTML中的Ajax.Autocompleter不起作用

我有一個嵌套的形式(沿着賴安貝茨Railscast教程主題),它允許用戶動態添加額外的領域,添加/刪除嵌套模型使用基於原型的JavaScript。額外的字段可以添加和刪除,並可以很好地創建新的模型。

問題是,其中一個字段使用Ajax.Autocompleter;在當部分被呈現在頁面的代碼如下所示:

<script type="text/javascript"> 
//<![CDATA[ 
new Ajax.Autocompleter(...various args...); 
//]]> 
</script> 

如果部分渲染到開始(該autocompleter工作正常例如,如果表單的開始是部分的一個實例,或當編輯現有的嵌套模型)。但是,它在動態添加的表單字段中不起作用。

我已經嘗試使用插入()和只是設置一個空的div的innerHTML插入HTML部分。使用insert(),Autocompleter代碼將被評估,<script>標記中的所有內容都會消失(正如我所理解的那樣),但自動完成功能無效。通過設置innerHTML,腳本看起來與預渲染的部分完全一樣,但自動完成器仍然不會被調用。

我懷疑這與evalScripts的工作方式有關,我發現some documentation on the subject,但我很難找出如何將它應用到Autocompleter聲明。

任何意見非常感謝!

ETA:將用於在新的部分添加的javascript:

function add_section(link, nested_model_name, content) { 
     // get the right new_id which should be in a div with class "last_id" at the bottom of 
     // the nearest section 
     var last_id = parseInt($(link).up().previous('.last_id').innerHTML); 
     var new_id = last_id + 1; 
     var regexp = new RegExp("new_" + nested_model_name, "g"); 
     content = content.replace(regexp, new_id) 

     // this is the line that actually inserts the content into the page 
     $(link).up().insert({before: content}); 
    } 

調試與螢火示出內容是正確的(即,具有在它的正常工作的自動完成代碼)之前,它是插入。

回答

0

是你的JS註冊自動完成器在你通過ajax.updater加載的腳本標記中嗎?如果是的話,你必須添加evalScript參數有它eval'ed:new Ajax.Updater('target',url,{method:'get', evalScripts:true});

+0

感謝您的嘗試,但不幸的是沒有 - 我已經添加了JavaScript功能,將新的部分添加到我原來的問題,以獲得更清晰。我的意思是用'insert()'Prototype嘗試評估腳本,可能與使用Ajax.Updater和evalScripts設置爲true的方式相同。 – shalott 2010-10-26 14:18:13

0

好了,作爲一個實驗我試着只是改變我Autocompleter助手代碼如下,現在它工作正常:

FROM:

​​

TO:

javascript_tag("var autocomplete_for_#{fieldname} = new Ajax.Autocompleter(... 

這是在Rails幫手,但除非我誤會,我認爲這一點是通過declari一個變量,它會導致原型在插入代碼時實際評估新調用。

(更多/更好地瞭解爲什麼這個工作和其他不仍然是V歡迎不過,因爲現在這主要是盲目的運氣。)

1

我知道這是一個老問題,但我最近有同樣的問題。

我不確定你使用的是什麼版本的auto_complete?我正在使用git的rails/auto_autocomplete。

在該插件的JavaScript代碼是這樣

lib/auto_complete_macros_helper.rb 

def auto_complete_field(field_id, options = {}) 
    function = "var #{field_id}_auto_completer = new Ajax.Autocompleter(" 

我有同樣的問題。輸入字段將可見,但自動完成功能不起作用。事實證明,var關鍵字使可變的本地作用域。

這意味着在evalscripts中評估的任何東西與原始DOM對象都處於不同的範圍。

我的補丁只是刪除var關鍵字。

lib/auto_complete_macros_helper.rb 

def auto_complete_field(field_id, options = {}) 
    function = "#{field_id}_auto_completer = new Ajax.Autocompleter(" 

我不知道有足夠的瞭解您的設置肯定地說什麼是錯的,但我敢打賭,它是與evalscripts的範圍內爲好。

相關問題