Привет, это первый раз, когда я фактически закончил писать вопрос, не давая мне ответа в процессе.:)
У меня есть вложенная форма (в соответствии с руководством Ryan Bates по Railscast по теме), которая позволяет пользователям динамически добавлять дополнительные поля для добавления / удаления вложенных моделей с использованием JavaScript на основе Prototype.Дополнительные поля могут быть добавлены и удалены и отлично работают для создания новых моделей.
Проблема в том, что в одном из полей используется Ajax.Autocompleter;код на странице, когда визуализируется частичное, выглядит следующим образом:
<script type="text/javascript">
//<![CDATA[
new Ajax.Autocompleter(...various args...);
//]]>
</script>
Автозаполнение работает нормально, если частичное рендеринг начинается с (например, если форма начинается с одного экземпляра частичного,или при редактировании существующих вложенных моделей).Однако, это не работает в динамически добавляемых полях формы.
Я попытался использовать и insert (), и просто установить innerHTML пустого div для вставки частичного HTML.С помощью insert () выполняется оценка кода автозаполнения, и все в теге <script>
исчезает (как я понимаю, ожидается), но автозаполнение не работает.При настройке innerHTML скрипт выглядит точно так же, как и в предварительно отрендеренном фрагменте, но автозаполнение все равно не вызывается.
Я подозреваю, что это как-то связано с тем, как работает evalScripts, и я нашел некоторую документацию по теме , но мне трудно разобраться, как подать заявкуэто к объявлению Автозаполнения.
Любой совет, который высоко ценится!
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});
}
Отладка с помощью firebug показывает, чтосодержимое корректно (т.е. содержит нормально работающий код автозаполнения) перед его вставкой.