0

ActionCableチャネルのCoffeeScript部分で複数のボタンを作成し、イベントリスナーを照合することに問題があります。 リテラルをオフにしないで、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 
      

      私はすでにあまりにも長い間、この部分に引っかかってきたので、誰もができれば、私は本当に幸せになるだろう

  • 答えて

    0

    問題はクリック時のハンドラの最初の部分で問題になりました。中括弧内の式は一重引用符で囲む必要がありました。たとえば、次のように

    $('#answer_button_0').on 'click', (e) -> App.answer_data.send_data() 
    

    しかし、私は$.parseHTML("\'")を使用して、単一引用符をエスケープしなければならなかったリテラル文字列にそれを回すせずに私の文字列の前面と背面に単一引用符を連結することができるようにします。

    だから、何であったか、最終的に私のために働いて、この:は[EDIT:これは解決策ではありませんでしたが判明し、以下を参照してください]

    $($.parseHTML("\'" + '#' + answer_text + counter + "\'")).on 'click', (e) -> App.answer_data.send_data() 
    

    EDIT: は、イベントリスナーを修正するために管理し、ボタン(感謝@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 
    

    私はボタンがあるAppenた後に(コードの後半で別々のループをしなければならなかったイベントリスナーを修正するにはDED)のページへ:

    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 
    

    残念ながら、今のボタンとイベントリスナーは、私は、問題を抱えている仕事ということID私は新しいで作成したイベントリスナーに渡すプロパティループ(send_data(id))は常に同じです - 私が押すボタンとは独立しています。/

    EDIT 2:

    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 
    

    はありがとう:@mu私はインクルードキーワードんし、今では作品を追加示唆したように私は考え、なぜ...を持っていません! :)

    +0

    本当ですか? '$( '#' + answer_text + counter)'は '$(" ## {answer_text}#{counter} ")'と同じでなければなりません。 '

    +0

    あなたは正しい@ムです。 '$('#answer_button _ '+ counter).on' click '、(e) - > App.answer_data.send_data() 'が正しい連結方法でした。あなたは他の2つの部分についても正しいです:私はそれを 'answerHtml.push 'に変更しました。"ボタンが実際にページに追加された後にイベントリスナーを設定する2番目のループ。残念ながら今私は別の問題に直面しています - 私は私の質問を更新しました。 – megahra

    +0

    あなたは 'do'ループが必要です。[このセクションの最後](http://coffeescript.org/#)の[この回答](https://stackoverflow.com/a/18047974/479863)を参照してください。ループ)、[これらの検索結果](https://stackoverflow.com/search?q=user%3A479863+%5Bcoffeescript%5D+CoffeeScript+provides+the)を参照してください。 –

    関連する問題