Ruby on rails 将不引人注目的JavaScript与Pusher相结合
我正在使用向Rails应用程序添加实时页面更新 以下是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
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);
});