Rails 3.0/JQuery — замена частичных фрагментов при вызове ajax

У меня есть два частичных файла _choose.html.erb и _details.html.erb.

Я делаю выбор следующим образом:

<div id="choose" class="box" style="padding:10px;" >
        <%= render :partial => "choose" %> 
</div>

В контроллере я вызываю метод выбора.

def choose  
    respond_to do |format|
  format.js
end
end 

А в Choose.js.erb вызываю следующее:

$("#choose").replaceWith(<%= escape_javascript(render(:partial => "details"))%>);

Но ничего не происходит. Частичная информация находится в правильном месте, и если я визуализирую ее на странице, например, ‹%= render :partial =› details %›, она появляется без проблем. Но я не могу поменять его, используя вышеуказанный метод ajax.

If I do:

$("#choose").replaceWith("a yaddy yaddy"); 

yaddy yaddy отображается в разделе выбора.

Я что-то упустил здесь?

Я читал, в том числе SO, но безрезультатно.

Обновлять

Ответ либо 200, либо 304. И, используя firebug, я вижу, что ответ содержит частичное содержимое, но оно не отображается в браузере, что странно, но я полагаю, что совершил какое-то скрытое недовольство, о котором я не знаю....

Обновлять

в select.js.erb:

Если я вызываю "$("#choose").html("<%= escape_javascript(render(:partial => "choose", :object => @pages))%>")", часть выбора обновляется переменной экземпляра страницы.

Спасибо, все.


person slotishtype    schedule 03.09.2011    source источник
comment
Вы можете попытаться отладить его в браузере, используя Firebug (плагин Firefox) или эквиваленты Safari/Chrome/IE. Таким образом, вы можете точно видеть, что отправляется в браузер.   -  person Daan    schedule 03.09.2011
comment
Я сделал это, первый запрос - 200, а затем следующие, которые я пытаюсь, - 304 (без изменений). Однако частичное содержимое отображается в ответе, но не отображается в браузере.   -  person slotishtype    schedule 03.09.2011
comment
У вас есть jQuery, интегрированный в Rails? Или просто стандартный jQuery и стандартная библиотека Rails Prototype? Другими словами: есть ли у вас гем jquery-rails в вашем Gemfile?   -  person Daan    schedule 03.09.2011
comment
У меня не установлен гем jquery-rails, но у меня есть Jquery в моем каталоге javascripts, и у меня также есть rails.js (UJS) в javascripts. У меня также есть config.action_view.javascript_expansions[:defaults] = %w(приложение jquery rails) в моей конфигурации приложения. Нужно ли также включать драгоценный камень?   -  person slotishtype    schedule 03.09.2011
comment
Кроме того, в каталоге javascripts нет других javascripts.   -  person slotishtype    schedule 03.09.2011
comment
Честно говоря, откажитесь от RJS. Он был извлечен в отдельный гем для 3.1 и объединяет проблемы.   -  person coreyward    schedule 03.09.2011
comment
Привет, @coreyward, спасибо за комментарий. Однако я не думал, что использую здесь RJS. Я думал, что использую JQuery с шаблонами html.erb? Мне легко понять, как я это делаю, но сейчас я немного не уверен в подходе.   -  person slotishtype    schedule 03.09.2011


Ответы (1)


Можете ли вы убедиться, что в обоих ваших фрагментах есть id = "choose" div? Если нет, ваш replaceWith сбрасывает их. Не могли бы вы .html("") хотеть?

person Kristian PD    schedule 03.09.2011
comment
Ни в одном из разделов нет выбора div. _choose.html.erb отображается в элементе выбора div, и я пытаюсь заменить этот частичный элемент на частичный элемент. Я также могу использовать .append(), но безуспешно. - person slotishtype; 03.09.2011
comment
Буооооооооооооооооооооооооооооооооооооооооооо! Это сработало. Я думал, что пробовал это раньше, но, очевидно, я облажался. Приветствую человека. Один быстрый вопрос, это не RJS? Правильный? Кстати, .html() работал не с выбором div.... - person slotishtype; 03.09.2011
comment
RJS — это более старый подход, когда вы фактически использовали помощники рельсов для вставки javascript. Это просто ответ JS. На самом деле вы используете jQuery, когда говорите о .append .html и .replaceWith. replaceWith фактически перезаписывает весь div, а не просто вставляет его. .html вставляет в него ваш частичный элемент и сохраняет его, но сохраняет div choose вокруг - person Kristian PD; 03.09.2011
comment
Это то, о чем я думал. Другой парень сказал, что я должен перестать использовать RJS, но я этого не делаю. В любом случае, спасибо за вашу помощь. - person slotishtype; 03.09.2011