我正在一個相當簡單的Rails應用程序,人們可以提出問題,並給予好評的問題。我想建立一些實時功能,並決定與Pusher一起做(主要是因爲它似乎與部署在heroku上非常兼容)。在Pusher事件的回調函數中渲染rails部分。
目前,當你添加一個新的問題,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
我希望我可以簡單地重用我在推回調部分,所以我可以重新創建一個AJAX之後會發生什麼請求推送活動。請參見下面的簡單形式:
<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'的錯誤'undefined method'content'。這是有道理的,因爲直到出現「創建問題」事件纔會定義問題。然而,我不明白爲什麼Rails在'創建問題'事件之前試圖渲染那個部分。 (順便說一句,我沒有檢查部分,其他的工作,數據從Pusher傳送過來)。
我發現大多數推送器集成的其他示例都有相當嚴重的客戶端JavaScript。由於我不是JavaScript嚮導,我希望我不必重做我的應用程序的前端只是爲了合併推送器。有沒有辦法讓我的代碼保持乾爽並在Pusher回調中使用我的分支?
這似乎並沒有在軌道4,5的工作 - 你有沒有更新的代碼? – fatfrog