visual_effect после replace_html не работает в rjs

Изучая ruby ​​on rails, я создал блог. Когда пользователь добавляет сообщение через AJAX, вызывается следующий rjs:

page.replace_html 'posts',  :partial => @posts
page.visual_effect :Highlight, 'post_' + @post.id.to_s

Тем не менее, подсветка не происходит ... и никакого эффекта, даже скрытия.

Подсказки:

  • Это работает, если я просто делаю insert_html только для нового сообщения (но я хочу обновить весь список сообщений в это время)
  • Если я жестко закодирую идентификатор для следующего идентификатора в последовательности, он не будет работать в сообщении, но будет работать в следующем сообщении. { например .. жесткий код post_100 ... нет выделения при отправке 100, выделение 100 при отправке 101 }
  • Оповещение показывает, что 'post_' + @post.id.to_s — это то, что ожидается (post_100 и т. д.)

Любые идеи или предложения по отладке?

Спасибо, Орландо


person Orlando    schedule 04.03.2010    source источник
comment
После того, как сообщение добавлено, проверьте свою страницу, используя что-то вроде firebug, чтобы увидеть фактический элемент div, содержащий новое сообщение. Я предполагаю, что это не post_100, а что-то еще.   -  person Alex Polkhovsky    schedule 04.03.2010
comment
Хорошее предложение, но оно выглядит так, как хотелось бы. Это согласуется между тем, что показывает Firebug, и тем, что отображает оповещение: page.replace_html 'posts', :partial =› @posts page.visual_effect :Highlight, 'post_' + @post.id.to_s page ‹‹ alert('post_ + @ post.id.to_s + ');;   -  person Orlando    schedule 04.03.2010
comment
Это оповещение проверяет только то, что id.to_s равно 100, а не то, что партиал содержит что-то с id=posts_100. После того, как вы вернете результат, возвращает ли что-нибудь $('posts_100') в консоли Firebug? Или вы можете выполнить render_to_string/logger.debug своего партиала, чтобы увидеть, есть ли в нем правильный идентификатор.   -  person wesgarrison    schedule 04.03.2010
comment
Да, $('posts_100') возвращается, как и ожидалось, в консоли Firebug.   -  person Orlando    schedule 05.03.2010


Ответы (2)


Можете ли вы предупредить innerHTML о $("post_#{@post.id}") перед visual_effect.

Firebug выдает ошибку, когда доходит до visual_effect?

Можете ли вы сделать что-то еще, например, предупреждение после строки visual_effect?

У вас есть необходимые файлы js?

person Apie    schedule 05.03.2010
comment
Отличные предложения. Я уверен, что необходимые js включены, потому что другие визуальные эффекты работают. Я не заметил никаких ошибок в firebug и не заметил ничего плохого в HTML при визуальном осмотре, но я не пробовал оповещения. Однако после моего последнего сообщения я решил покончить с зависимостью от RJS и заставить все отлично работать, используя другую архитектуру. - person Orlando; 08.03.2010

На самом деле это не решение проблемы, но с тех пор я перестал полагаться на rjs. Вместо этого я следую схеме, описанной здесь

http://blog.solnic.eu/2007/10/30/why-javascript-helpers-in-rails-are-evil

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

person Orlando    schedule 08.03.2010