我正在使用一个相当简单的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回调中重用我的部分,这样我就可以重新创建AJUS请求推送事件后发生的事情。请参阅以下最简单的形式:
<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>
确定。因此,当我尝试加载页面时,我的这个错误'未定义的方法'内容'为nil:NilClass'。这是有道理的,因为直到存在“创建问题”事件才会定义问题。但是,我不明白为什么Rails试图在'create-question'事件之前渲染那个部分。 (顺便说一句,我检查过,没有部分,其他一切正常,数据从Pusher发出)。
我发现的大多数其他推送器集成示例都有相当重的客户端javascript。因为我不是javascript向导,所以我希望我不必重做我的应用程序的前端只是为了合并推送器。有没有办法让我的代码干掉并在Pusher回调中使用我的部分?
答案 0 :(得分:0)
好的经过一些研究后我觉得我现在找到了解决方案。这个要点帮助我通过Pusher发送完全渲染的部分:https://gist.github.com/1154209。
这个方法适合我,因为它允许我重用我的部分并合并Pusher。我在Gist中选择了3,因为它可以让你在未来相对容易地添加更多数据。