将不显眼的JavaScript与Pusher结合起来

我使用Pusher为我的Rails应用添加实时页面更新。将不显眼的JavaScript与Pusher结合起来

这里有一个如何推进器工作(我以后会告诉你我想它做什么)的简短概要:

控制器:

class ThingsController < ApplicationController 

def create

@thing = Thing.new(params[:thing])

if @thing.save

Pusher['things'].trigger('thing-create', @thing.attributes)

end

end

end

的Javascript(在<head>...</head>):

var pusher = new Pusher('API_KEY'); 

var myChannel = pusher.subscribe('MY_CHANNEL');

myChannel.bind('thing-create', function(thing) {

alert('A thing was created: ' + thing.name); // I want to replace this line

});

我想用ajax请求替换注释行来触发一些不显眼的JavaScript。假设我有一个文件的应用程序/视图/事/ index.js.erb的:

$("things").update("<%= escape_javascript(render(@things))%>"); 

我应该在myChannel.bind回调触发上面的代码执行写?

回答:

你不是真的在这里比较苹果对苹果。

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

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

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


回应@ user94154的评论:

免责声明:我从来没有听说过推,直到你的问题。

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

  1. 如果它不是很多的HTML标记,你可能想打破“不要重复自己”的规则,并重复您的控制器中的HTML标记,并发送对推者
  2. 如果它是很多标记,我会将我的视图生成代码抽象为助手。您也可以通过您的控制器呼叫帮手。

在客户端,您应该有一个空的div(或某个DOM元素),它可以容纳来自Pusher的HTML。而做这样的事情:

myChannel.bind('thing-create', function(thing) { 

$("div#thing_holder").html(thing.html);

});

回答:

http://blog.new-bamboo.co.uk/2010/5/12/integrating-pusher-into-a-complex-app-in-one-day

多一点我的头,但我认为这可能会使你在正确的轨道上。

回答:

pjax可能是你在找什么。自述文件中包含了如何在Rails中开始使用它。

回答:

我明白了,这里是你如何做到这一点?

试戴写在这里,但代码缩进等不适合长期的东西很好地工作..

http://jbeas.com/ruby-on-rails/rails-3-pusher-app-and-unobtrusive-js/

以上是 将不显眼的JavaScript与Pusher结合起来 的全部内容, 来源链接: utcz.com/qa/261565.html

回到顶部