Я работаю над довольно простым приложением Rails, где люди могут задавать вопросы и задавать вопросы.Я хочу встроить некоторые функции реального времени и решил сделать это с помощью Pusher (в основном потому, что он кажется очень совместимым с развертыванием на heroku).
В настоящее время, когда вы добавляете новый вопрос, следующий бит javascript получаетвыполнил:
if $('.question').hasClass('no_current_questions_notice')
$('.no_current_questions_notice').fadeOut 400, ->
$(this).replaceWith('<%= escape_javascript(render 'questions/added_question', :question => @added_question) %>')
$('.last_question').hide().fadeIn 400
else
$('.last_question').removeClass('last_question')
$('#added_question').replaceWith('<%= escape_javascript(render 'questions/added_question', :question => @added_question) %>')
$('.last_question').hide().fadeIn 400
Я надеялся, что смогу просто повторно использовать частичное в обратном вызове Pusher, чтобы я мог воссоздать то, что происходит после AJAX-запроса на событие Pusher.Смотрите ниже в простейшей форме:
<script type='text/javascript'>
var pusher = new Pusher('<%= Pusher.key %>');
var channel = pusher.subscribe('course-<%= @course.id %>');
channel.bind('create_question', function(data) {
var @added_question = data;
$('#added_question').replaceWith('<%= escape_javascript(render 'questions/added_question', :question => @added_question) %>');
});
</script>
, и для справки это мой частичный:
<div class='question last_question'>
<div class='question_content'>
<%= question.content %>
</div>
<%= render 'upvotes/agree', :question => question %>
</div>
<div id='added_question'>
</div>
ОК.Таким образом, my this выдает ошибку 'неопределенный метод `content' для nil: NilClass 'прямо при попытке загрузить страницу.Это имеет смысл, потому что вопрос не определен, пока не произойдет событие «создать вопрос».Однако я не понимаю, почему Rails пытается визуализировать это частичное перед событием create-question.(Кстати, я проверил и без частичного, все остальное работает, и данные отправляются через Pusher).
Большинство других примеров интеграции pusher, которые я обнаружил, имели довольно тяжелый JavaScript-код на стороне клиента.Поскольку я не волшебник javascript, я надеялся, что мне не придется переделывать интерфейс моего приложения только для того, чтобы включить толкатель.Есть ли способ сохранить мой код СУХИМЫМ и использовать мои частичные функции в обратном вызове Pusher?