Rails ActionCable 部署到 test 环境功能失效

pain · 2015年08月07日 · 最后由 rei 回复于 2015年08月07日 · 1663 次阅读

本地环境功能已正常运行。发布到 test 环境后,前台无反应。test 环境 redis,puma 正常,后台可以看到广播发送了。这是我的前端订阅消息的代码:

var Notices = React.createClass({
  getInitialState: function() {
    return {
      requests: []
    };
  },

  renderRequest: function(request) {
    return (
      <li>
        <a href="#">
          <div>
            <i className="fa fa-tasks fa-fw"></i> {request.id}
            <span className="pull-right text-muted small">{request.created_at}</span>
          </div>
        </a>
      </li>
    );
  },

  componentDidMount: function() {
    this.setupSubscription();
  },

  updateRequests: function(request) {
    var requests = React.addons.update(this.state.requests, { $push: [request]});
    this.setState({requests: requests, style: {color: 'red'}});
  },

  setupSubscription: function(){
    App.requests = App.cable.subscriptions.create("RequestsChannel", {
      received: function (data) {
        this.updateRequests(data.request);
      },

      updateRequests: this.updateRequests
    });
  },

  check: function() {
    this.setState({style: {color: ''}});
  },

  render: function() {
    return (
      <div onClick={this.check}>
        <a className="dropdown-toggle" data-toggle="dropdown" href="#" style={this.state.style}>
          <i className="fa fa-bell fa-fw"></i>{this.state.requests.length > 0 ? this.state.requests.length : null}
        </a>
      </div>
    );
  }
});

求指导!如果需要额外信息请留言。

received: function (data) {
  this.updateRequests(data.request);
},

updateRequests: this.updateRequests

我不太懂 react,这个 this 是那个 this 吗?

#1 楼 @rei 最终调用的是 Notices 的 updateRequests

#2 楼 @pain 在这个地方打 log,看触发了没,还有 this 是什么。

#3 楼 @rei 哪个 this?截图指下?

#4 楼 @pain 这个 this

this.updateRequests(data.request);

执行上下文是 received 上下文,找不到 updateRequests 的吧。

应该要:

setupSubscription: function(){
  var _this = this;
  App.requests = App.cable.subscriptions.create("RequestsChannel", {
    received: function (data) {
      console.log(data); // 打个 log 看看触发了没
      _this.updateRequests(data.request);
    }
  });
},

#5 楼 @rei 没触发。这个 this 的上下文是 App.requests,App.requests 的 updateRequests 属性会调用 Notices 的 updateRequests。

没触发我不懂了,我还没用上。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号