结合不干扰JavaScript和Pusher

问题描述

| 我正在使用Pusher将实时页面更新添加到我的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
Javascript(在in1ѭ中):
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。假设我有文件app / views / things / index.js.erb:
$(\"things\").update(\"<%= escape_javascript(render(@things))%>\");  
我应该在myChannel.bind回调中编写什么以触发上述代码执行?     

解决方法

        您并不是在这里真正比较苹果。 您正在将XHR请求中呈现给'4'的模板与POST到
things/create
@thing
对象的属性进行比较。 您需要在网络浏览器中处理从Pusher返回的“ 7”对象,并相应地修改DOM。 或者,一个更简单的解决方案可能是让您的控制器将格式化的HTML发送给Pusher而不是对象属性。然后,您的JavaScript代码可以只插入格式化的HTML,而不是尝试解析
thing
对象并手动修改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);
});
    ,        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/     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...