Ruby on rails 将不引人注目的JavaScript与Pusher相结合

Ruby on rails 将不引人注目的JavaScript与Pusher相结合,ruby-on-rails,jquery,real-time,unobtrusive-javascript,Ruby On Rails,Jquery,Real Time,Unobtrusive Javascript,我正在使用向Rails应用程序添加实时页面更新 以下是Pusher如何工作的简要概述(稍后我将向您展示我希望它做什么): 控制器: class ThingsController < ApplicationController def create @thing = Thing.new(params[:thing]) if @thing.save Pusher['things'].trigger('thing-create', @thing.attribut

我正在使用向Rails应用程序添加实时页面更新

以下是Pusher如何工作的简要概述(稍后我将向您展示我希望它做什么):

控制器:

class ThingsController < ApplicationController
  def create
    @thing = Thing.new(params[:thing])

    if @thing.save
      Pusher['things'].trigger('thing-create', @thing.attributes)
    end
  end
end
我想用ajax请求替换注释行,以触发一些不引人注目的JavaScript。假设我有app/views/things/index.js.erb文件:

$("things").update("<%= escape_javascript(render(@things))%>");  
$(“事物”)。更新(“”);
我应该在myChannel.bind回调中写入什么来触发执行上述代码?


有点过头了,但我想这可能会让你走上正轨

可能就是你要找的。自述文件中包括了如何在Rails中开始使用它。

这里并不是在比较苹果和苹果

您正在将XHR请求中呈现给
things/index
的模板与POST到
things/create
@thing
对象的属性进行比较

您需要在web浏览器中处理从Pusher返回的
对象,并相应地修改DOM

或者,一个更简单的解决方案可能是让您的控制器将格式化的HTML发送到Pusher,而不是对象属性。然后javascript代码就可以插入格式化的HTML,而不是试图解析
对象
并手动修改DOM


对@user94154评论的回应:

免责声明:在你提问之前,我从未听说过Pusher

这确实创建了一个挑战b/c通常您的HTML在视图中格式化,但您必须从控制器向Pusher发送数据。我可以想出一些方法来做到这一点:

  • 如果没有太多的HTML标记,您可能希望打破“不要重复自己”规则,在控制器中重复HTML标记并将其发送给Pusher
  • 如果是大量的标记,我会将视图生成代码抽象为助手。您也可以从控制器调用助手
  • 在客户端,您应该有一个空div(或一些DOM元素),它可以从Pusher保存HTML。这样做:

    myChannel.bind('thing-create', function(thing) {
      $("div#thing_holder").html(thing.html);
    });
    

    我明白,这是你怎么做的

    尝试在这里编写,但是代码缩进等对于较长的内容不起作用


    您是否正在通过AJAX创建
    东西
    ?或者仅仅是一个标准的HTTP请求?嘿,我只是在阅读了你的多个问题之后才考虑这个问题,并为你写了一个答案。检查我的答案张贴在下面。谢谢。谢谢@joel,我稍后会看一看并发表评论。我如何做最后一个选项,即客户端对服务器进行ajax调用,并从响应中的特定部分返回html?谢谢您的响应。选项1没有回答我的问题——我知道通过重复我自己,我可以很容易地解决这个问题(至少在短期内)。关于选项2,您是说我从控制器中的助手处获取空HTML,将其发送到模板,然后使用Pusher回调填充内容?不,助手方法提供格式化HTML,您的控制器和视图使用格式化HTML。
    myChannel.bind('thing-create', function(thing) {
      $("div#thing_holder").html(thing.html);
    });