将不显眼的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。我可以想到几个方法来做到这一点:
- 如果它不是很多的HTML标记,你可能想打破“不要重复自己”的规则,并重复您的控制器中的HTML标记,并发送对推者
- 如果它是很多标记,我会将我的视图生成代码抽象为助手。您也可以通过您的控制器呼叫帮手。
在客户端,您应该有一个空的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