Рендеринг частичек рельсов в функции обратного вызова события Pusher. - PullRequest
0 голосов
/ 12 декабря 2011

Я работаю над довольно простым приложением 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?

1 Ответ

0 голосов
/ 13 декабря 2011

Хорошо, после еще одного исследования, я думаю, что нашел решение на данный момент. Эта суть помогла мне отправить полностью обработанный фрагмент через Pusher: https://gist.github.com/1154209.

Этот метод работает для меня, поскольку он позволяет мне повторно использовать мои частичные функции и включать Pusher. Я выбрал вариант 3 в Gist, потому что он позволит вам относительно легко добавлять дополнительные данные для отправки в будущем.

...