0

创建.js.erb

    $("#chat").append("<%= j render(@message) %>");
    $("#new_message")[0].reset();

我需要将其更改为类似于以下内容:

function newMessage() {
    $("#chat").append("<%= j render(@message) %>");
    $("#new_message")[0].reset();
}
channel.bind('new_message', newMessage());

这是我在MessagesController中的create方法的ajax 请求调用。我需要像这样进行更改以将此函数作为index.html.erb的回调调用以使用Pusher服务器。我想要实现的是一个实时聊天应用程序,因此所有客户端都应该能够在不刷新浏览器的情况下推送消息。

index.html.erb

<script src="http://js.pusherapp.com/1.9/pusher.min.js"></script>
<script type="text/javascript" charset="utf-8">
  $(function() {
    var pusher = new Pusher('app_key'); // Replace with your app key
    var channel = pusher.subscribe('my_channel_chat');
  });
</script>

我想我对 create.js.erb 文件中的上下文感到困惑。谁能帮我解决这个问题?

更新:

消息控制器

  def index
    @messages = Message.all
  end

  def create
    @message = current_user.messages.create!(params[:message])
    Pusher.trigger('my_channel_chat', 'new_message', {:message => @message.content})
  end
4

1 回答 1

1

我不确定我是否完全理解您的问题,但根据我的理解,这应该可以解决您的问题:

function newMessage() {
    $("#new_message")[0].reset();
}
$('#chat').on('new_message', newMessage);
$("#chat").append("<%= j render(@message) %>").trigger('new_message');
于 2013-06-09T09:17:02.323 回答