2017-06-03 5 views
0

Warum funktioniert nicht?Javascript/Coffeescript append TypError: ist keine Funktion

Es funktioniert, wenn ich Variable msg für einen Zeichenfolgewert ändern.

Code:

console.log full_messages # Array [ "text to be displayed" ] 
for msg in full_messages 
    $('#error_explanation ul').append('<li>'+ msg +'</li>') 

Fehlermeldung:

TypeError: msg is not a function

+0

@tholo Meinst du etwa "$ ->"? Falls ja! Ja, so ist es. –

+0

'full_massages [msg]' – tholo

+0

$ ('# error_explanation ul'). Append ('

  • ' + full_messages [0] + '
  • ') - das hat auch nicht funktioniert (ohne Iteration) –

    Antwort

    2

    Ihr Problem in Ihrem Leerzeichen (oder deren Fehlen):

    '<li>'+ msg +'</li>' 
    

    Coffee denkt, dass die zweite +, dass ist ein unärer Operator, so wird das Ganze interpretiert als:

    '<li>' + msg(+'</li>') 
    

    Wenn Sie setzen Räume auf beiden Seiten des binären Operatoren:

    '<li>' + msg + '</li>' 
    #  ^^^ ^^^ 
    

    dann Coffee tut, was Sie erwarten es. Faustregel: immer Leerzeichen auf beiden Seiten von binären Operatoren einfügen.

    Sie könnten auch String-Interpolation verwenden:

    "<li>#{msg}</li>" 
    

    , die genau das gleiche JavaScript als '<li>' + msg + '</li>' wird, ist aber (wohl) besser lesbar und idiomatische.

    +0

    Netter Mann! Ich wusste, dass das Problem etwas Dummes war! Und sehr schön der Tipp zur Interpolation! –

    +0

    Gern geschehen, ich habe so viele kleine Formatierungsregeln verinnerlicht, dass ich ein bisschen gebraucht habe, um herauszufinden, was falsch war. –