Как легко отправить элементы DOM для ActionCable? - PullRequest
1 голос
/ 08 апреля 2019

Я не уверен, что я просто пытаюсь сделать что-то сумасшедшее здесь, может, мне просто нужно указать в правильном направлении. У меня есть список элементов с галочками. Мне нужно, чтобы два человека знали (собеседование), если другой поставил галочку. ActionCable казался идеальным для этого.

Все настроено с точки зрения действия, но мне нужно отправить точный элемент, который должен быть отмечен, на действие, чтобы он мог пометить его на внешнем интерфейсе другого человека. Я попытался отправить элемент DOM, но он сериализован в JSON, и я не могу изменить его на другом конце (или просто не знаю, как его использовать).

Ниже приведен мой код. Первый box.html - поставить галочку на своем поле в форме. Затем, после первого метода protectDefault (), я пытаюсь отправить тот же элемент box в actioncable, чтобы отметить его на внешнем интерфейсе другого человека.

  $('.btn-group-vertical').each(function(){
    var $this = $(this);
    var success = $this.find('.applicant-success')
    var failure = $this.find('.applicant-failure')
    var box = $this.parent().next().find('.int_success');
    success.on('click', function(e) {
      box.html("<img class='interview-img3' src='/images/tick.png'>");
      e.preventDefault();
      App.room.ping(box);
    });
});

1 Ответ

1 голос
/ 08 апреля 2019

Элементы DOM являются локальными для документа страницы на одной стороне соединения. Вам нужно ввести какой-то уникальный идентификатор, который будет действителен во всех задействованных системах. Это может быть идентификатор из соответствующей записи базы данных, некоторый естественный ключ или даже SecureRandom.hex (но в этом случае вам нужно будет убедиться, что оба вовлеченных пользователя получат одинаковые идентификаторы)

Например: <div class='int_success' data-id='<%= applicant.id %>'>

А App.room.ping(box.data('id'))

...