在 Coffeescript 中将单引号连接到字符串的前后而不将其变为文字
Concatenation of single quotes to front and back of a String in Coffeescript without turning it literal
我在 ActionCable 频道的 CoffeeScript 部分创建多个按钮和匹配事件侦听器时遇到问题。我知道单引号文本(文字字符串)和双引号文本(字符串)的不同连接方法:
"#{first_name} McFly"
双引号
first_name + ' McFly'
用于单引号
对吗?
所以我有点困惑为什么这似乎不起作用:
answer_text = "answer_button_"
counter = 0
for i in data.answers
answerHtml.push "<button type='button' id=answer_text+counter >#{i.title}</button>"
$('#'+answer_text+counter).on 'click', (e) -> App.answer_data.send_data()
counter = counter+1
我已经在这部分停留太久了,所以如果有人能给我一个正确方向的提示,我将非常高兴:)
好的,所以问题出在单击处理程序的第一部分 - 大括号中的表达式需要用单引号引起来。例如:
$('#answer_button_0').on 'click', (e) -> App.answer_data.send_data()
但是为了能够将单引号连接到我的字符串 的正面和背面而不 将其转换为文字字符串,我不得不使用 [=15 转义单引号=].
所以最终对我有用的是:[编辑:原来这不是解决方案,见下文]
$($.parseHTML("\'" + '#' + answer_text + counter + "\'")).on 'click', (e) -> App.answer_data.send_data()
编辑:
设法修复事件侦听器和按钮(感谢@mu!):
answer_text = "answer_button_"
counter = 0
for answer in data.answers
answerHtml.push "<button type='button' id=#{answer_text+counter} >#{answer.title}</button>"
counter = counter+1
为了修复事件侦听器,我必须稍后在代码中创建一个单独的循环(在将按钮附加到页面之后):
counter = 0
for id in data.answers.map (answer) -> answer.id
console.log "[AC] answer id: #{i.id}" #This prints 4 different ids, like it should!
$('#answer_button_'+counter).on 'click', (e) -> App.answer_data.send_data(id)
counter = counter+1
不幸的是,现在按钮和事件侦听器可以工作了,我遇到了问题,我通过在新循环(在 send_data(id)
)总是相同的——独立于我按下的按钮。我不知道为什么...:/
编辑 2:正如@mu 建议的那样,我添加了 do 关键字,现在可以使用了:
counter = 0
for id in data.answers.map (answer) -> answer.id
do (id) ->
$('#answer_button_'+counter).on 'click', (e) -> App.answer_data.send_data(id)
counter = counter+1
谢谢! :)
我在 ActionCable 频道的 CoffeeScript 部分创建多个按钮和匹配事件侦听器时遇到问题。我知道单引号文本(文字字符串)和双引号文本(字符串)的不同连接方法:
"#{first_name} McFly"
双引号first_name + ' McFly'
用于单引号
对吗?
所以我有点困惑为什么这似乎不起作用:
answer_text = "answer_button_"
counter = 0
for i in data.answers
answerHtml.push "<button type='button' id=answer_text+counter >#{i.title}</button>"
$('#'+answer_text+counter).on 'click', (e) -> App.answer_data.send_data()
counter = counter+1
我已经在这部分停留太久了,所以如果有人能给我一个正确方向的提示,我将非常高兴:)
好的,所以问题出在单击处理程序的第一部分 - 大括号中的表达式需要用单引号引起来。例如:
$('#answer_button_0').on 'click', (e) -> App.answer_data.send_data()
但是为了能够将单引号连接到我的字符串 的正面和背面而不 将其转换为文字字符串,我不得不使用 [=15 转义单引号=].
所以最终对我有用的是:[编辑:原来这不是解决方案,见下文]
$($.parseHTML("\'" + '#' + answer_text + counter + "\'")).on 'click', (e) -> App.answer_data.send_data()
编辑: 设法修复事件侦听器和按钮(感谢@mu!):
answer_text = "answer_button_"
counter = 0
for answer in data.answers
answerHtml.push "<button type='button' id=#{answer_text+counter} >#{answer.title}</button>"
counter = counter+1
为了修复事件侦听器,我必须稍后在代码中创建一个单独的循环(在将按钮附加到页面之后):
counter = 0
for id in data.answers.map (answer) -> answer.id
console.log "[AC] answer id: #{i.id}" #This prints 4 different ids, like it should!
$('#answer_button_'+counter).on 'click', (e) -> App.answer_data.send_data(id)
counter = counter+1
不幸的是,现在按钮和事件侦听器可以工作了,我遇到了问题,我通过在新循环(在 send_data(id)
)总是相同的——独立于我按下的按钮。我不知道为什么...:/
编辑 2:正如@mu 建议的那样,我添加了 do 关键字,现在可以使用了:
counter = 0
for id in data.answers.map (answer) -> answer.id
do (id) ->
$('#answer_button_'+counter).on 'click', (e) -> App.answer_data.send_data(id)
counter = counter+1
谢谢! :)