Противоположность insert_adjacent_html для канала CableReady?
На проблему был дан ответ - см. Сообщение ниже
У меня есть канал CableReady "Текущий", который динамически показывает ленту "Сообщений". Я могу заставить сообщения отображаться по отдельности, но я не могу понять, как удалить их из канала по отдельности.
Этот ввод сообщений в канал контролируется в файле PostsController.rb следующим образом:
def postshow
@post = Post.find(params[:id])
cable_ready["current"].insert_adjacent_html(
selector: "#current#{@video.id}",
position: "afterbegin",
html: render_to_string(partial: "posts/post", locals: {post: @post})
)
cable_ready.broadcast
end
Я пробовал remove
метод например cable_ready["current"].remove(...
но это просто удаляет все сообщения в канале за один раз
Я планирую использовать другой метод в моем PostsController.rb для выполнения удаления:
def postremove
@post = Post.find(params[:id]
...[code to remove the post here]
end
Я не хочу полностью удалять сообщение из DOM, потому что канал является динамическим, и я хочу, чтобы в какой-то момент они снова отображались в нем.
Отредактировано: Дальнейшее объяснение желаемого поведения
Представьте, что лента похожа на твиттер, новые сообщения появляются вверху. Но эти сообщения появляются только на определенное количество секунд. Вы также можете перемотать ленту до определенного момента. Таким образом, сообщение, которое было удалено из ленты, может снова появиться вверху, если вы перемотаете время назад.
Любые идеи или предложения по другой тактике приветствуются, спасибо
2 ответа
Спасибо Roland Studer за этот ответ:
Проблема заключалась в том, что у частичного не было правильного идентификатора. Самый внешний div партиала теперь выглядит так:
<div id="<%= dom_id(post)%>" ... >
и метод контроллера для удаления сообщения теперь выглядит так:
def postremove
@post = Post.find(params[:id])
cable_ready["current"].remove(
selector: "[data-id=\"#{@post.id}\"]"
)
cable_ready.broadcast
end
Магия!:)
Поскольку вы не хотите удалять сообщение из DOM, возможно, одним из решений было бы просто скрыть сообщение. Вы можете использовать метод ниже, чтобы установить свойство CSS.В качестве альтернативы, если вы используете структуру CSS, вы можете просто добавить класс через: