- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建动态 channel 供用户聊天,但无法将 room_id
传递到 App.cable.subscriptions.create
调用中在 room.coffee
文件中。任何有助于澄清为什么我不能使用 jQuery 获取该值的帮助都非常有帮助。
这是我在控制台中收到的内容:
RoomChannel is transmitting the subscription confirmation
RoomChannel is streaming from room__channel
房间 Controller
class RoomsController < ApplicationController
before_action :authenticate_user!
def show
other_user = User.find(params[:id])
title = [other_user.id.to_s, current_user.id.to_s].sort!.join("-")
@room = Room.where(title: title).first
if @room.nil?
@room = Room.create! title: title
else
@messages = Message.where(room_id: @room[:id])
end
end
end
show.html.erb
<h1>Chat Room</h1>
<div id="messages">
<% if @messages.blank? %>
<div id="no_messages_yet">
<p>No messages yet...</p>
</div>
<% else %>
<%= render @messages %>
<% end %>
</div>
<form>
<label>Say something:</label><br>
<input type="text" data-behavior="room_speaker">
<input type="hidden" value="<%= @room[:id] %>" id="room_id">
<input type="hidden" value="<%= current_user[:id] %>" id="user_id">
</form>
views/messages/_message.html.erb
<div class="message">
<p><%= message.content %></p>
</div>
房间.咖啡
$(document).ready ->
room_id = $("#room_id").val()
console.log(room_id)
// => 1
// When I try and pass 'room_id' as the value for room_id:, I get an error stating the variable is not recognized.
App.room = App.cable.subscriptions.create {channel: "RoomChannel", room_id: $('#room_id').val()},
connected: ->
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
received: (data) ->
$('#messages').append data['message']
# Called when there's incoming data on the websocket for this channel
speak: (message, room_id, user_id) ->
@perform 'speak', message: message, room_id: room_id, user_id: user_id
$(document).on 'keypress', '[data-behavior~=room_speaker]', (event) ->
if event.keyCode is 13 # return = send
App.room.speak event.target.value, $('#room_id').val(), $('#user_id').val()
event.target.value = ""
event.preventDefault()
房间 channel
class RoomChannel < ApplicationCable::Channel
def subscribed
stream_from "room_#{params[:room_id]}_channel"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
def speak(data)
m = Message.new
m.user_id = data["user_id"]
m.room_id = data["room_id"]
m.content = data["message"]
m.save!
end
end
消息.rb
class Message < ApplicationRecord
after_create_commit { MessageBroadcastJob.perform_later self }
end
jobs/message_broadcast_job.rb
class MessageBroadcastJob < ApplicationJob
queue_as :default
def perform(message)
ActionCable.server.broadcast "room_#{message.room_id}_channel", message: render_message(message)
end
private
def render_message(message)
ApplicationController.renderer.render(partial: 'messages/message', locals: { message: message })
end
end
最佳答案
将功能放入 $(document).ready
调用中。请记住,coffeescript 在缩进和空格方面非常敏感。
$(document).ready ->
room_id = $('#room_id').val()
App.room = App.cable.subscriptions.create {channel: "RoomChannel", room_id: room_id},
connected: ->
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
received: (data) ->
$('#messages').append data['message']
# Called when there's incoming data on the websocket for this channel
speak: (message, room_id, user_id) ->
@perform 'speak', message: message, room_id: room_id, user_id: user_id
$(document).on 'keypress', '[data-behavior~=room_speaker]', (event) ->
if event.keyCode is 13 # return = send
App.room.speak event.target.value, $('#room_id').val(), $('#user_id').val()
event.target.value = ""
event.preventDefault()
关于jquery - 如何使用 jQuery 将值传递到 coffescript ActionCable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45686249/
我喜欢使用 http://jsfiddle.net/ 用于测试,当我从一些教程中学习 coffeescript 时。我想注释掉多行。所以我点击我的 Mac cmd + / ,在大多数编辑器中,与注释掉
我在coffescript中有两个方法,它们看起来像这样: amount_calculation_when_unit_price_change = (parent) -> $(".unit_p
所以我有两个 Controller ,hotels和 videos .我想要 hotels.js.coffee能够访问在 videos.js.coffee 中创建的函数但我收到“未定义”错误。 我是
我试图递归地解析一个对象,但不知道下一个元素是字符串还是下一个嵌套对象。我正在考虑通过查看值的类型来做到这一点;它将是一个字符串或一个对象。但奇怪的事情正在发生...... 这段 Coffescrip
我认为 Karma CoffeeScript 代码覆盖率预处理器可能有问题。或者我不确定我做错了什么!所以我来找你 StackOverflow。基本上,我正在尝试设置 karma 测试套件,以 lco
首先,我知道我应该使用 javascript 而不是 coffeescript,但我只是在调整其他人的代码以查看是否可行。但是,我认为这并不重要......所以问题是,我如何获取日期的详细信息并可能在
我在 test.js 中有以下 Coffeescript yo () -> console.log("yo") 当通过 coffee -o public/javascripts/-cw public/
当我传递带有粗箭头的匿名函数作为 socket.io 回调,然后调用同一对象中的另一个方法时(如下所示),@ 的范围是正确的: module.exports = class InviteCreateS
这里有什么方法可以在不转换为 js 或 coffee 命令的情况下如何在 Nodejs 中执行 Coffescript 脚本。 可以即时翻译 coffeesctipts 的东西, Node 将如何请求
我在位于 Assets 管道的 CoffeScript 文件上尝试类似的操作。 但是我得到以下错误 throw Error("NoMethodError: undefined method `ren
我正在尝试使用 vim-coffee-script 插件 https://github.com/kchmck/vim-coffee-script但它没有将测试文件检测为 CoffeeScript 文件
我正在尝试创建动态 channel 供用户聊天,但无法将 room_id 传递到 App.cable.subscriptions.create 调用中在 room.coffee 文件中。任何有助于澄清
我是 CoffeeScript 的新手,对此非常兴奋。我做了一些基本循环 here .现在,CoffeeScript 正在为 every 循环定义一个循环变量,如下所示: var food, _i,
我有一个 HighCharts javascript,我正在尝试使用一些在线转换器将其转换为 CoffeeScript。 然而,它们都因“缺少操作数”而出错 这是代码 $(function() {
这段 JavaScript 代码工作正常。 function goToByScroll(id){ $('html,body').animate({scrollTop: $("#"+id)
我们在项目中使用 JavaScript(一种 DSL),并使用 Java Scripting API 运行它。 。 CoffeScript 看起来比 JS 好得多,所以我们想要它。 由于没有用于 Ja
我有以下项目结构 assets --javascripts ----controllers ------somefile.js ------somefile.js.coffee 我想编译 coffes
我正在expressJS中创建一个API,并且我想在每次文件更改时重新加载服务器 我试过了 gulp.task('server', function () { // Start the server
在 Ruby 中,我可以这样做: hash = ['foo', 'bar'].each_with_object({}) { |i, h| h[i] = 0 } 我如何在 CoffeeScript 中做
所以HAML 4 includes a coffeescript filter,它使我们喜欢咖啡的人可以做这样的整洁的事情: - word = "Awesome." :coffeescript $
我是一名优秀的程序员,十分优秀!