2011-12-12 25 views
0

我正在一個相當簡單的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回調中使用我的分支?

回答

0

好的,經過一些更多的研究,我想我現在已經找到了解決方案。這個要點幫助我通過推送器發送完全渲染的部分:https://gist.github.com/1154209

這種方法適用於我,因爲它允許我重新使用我的部分併合並Pusher。我在Gist中選擇了3,因爲它可以讓你添加更多的數據,以便相對容易地在將來發送。

+0

這似乎並沒有在軌道4,5的工作 - 你有沒有更新的代碼? – fatfrog