Handlebars.js: Ошибка синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΎΠΌ: ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ "ID", ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ undefined

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 29 июн. 2012  Β·  6ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: handlebars-lang/handlebars.js

Π― ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

НСпСрСхвачСнная ошибка: ошибка синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° Π² строкС 3:
{{#each people}} ------- ^
ОТидая "ID", ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» "undefined"

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° довольно проста ΠΈ Π½Π΅ связана с Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ символами, Π½ΠΎ ΠΌΠΎΠΉ сСрвСрный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ шаблонов поставил ΠΏΡ€ΠΎΠ±Π΅Π» ΠΏΠ΅Ρ€Π΅Π΄}}.
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, хотя я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΡƒΡ‡ΠΊΠΈ для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° {# each people}}.

      source = $("#people-in-clients-template").html();
      source = source.replace(/ }}/g, "}}");
      source = source.replace(/{{ /g, "{{");

ВсС 6 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

@ustun , Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС ΠΊΠΎΠ΄Π°, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ смоТСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ это. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ для этого jsfiddle.

@wagenet Бпасибо Π·Π° быстрый ΠΎΡ‚Π²Π΅Ρ‚. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΌΠΎΠ³Ρƒ это ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ #each Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ страницС. Если я ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ Π΅Π³ΠΎ Π² jsfiddle ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° консоли Chrome, ввСдя тСкст, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ тСкст, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ html (), Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. МнС интСрСсно, Π½Π΅ ΠΏΡƒΡ‚Π°ΡŽΡ‚ΡΡ Π»ΠΈ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹Π΅ строки.

Π’ΠΎΡ‚ ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹ΠΉ сСанс. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ссли я Π²Π²ΠΎΠΆΡƒ шаблон Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

template = $ ("# шаблон-люди-Π²-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ…"). html ()
"

{{ #each people }}
<li>{{ this }}</li>
{{ /each }}

"
t = Handlebars.compile(template);
function (context, options) {
    if (!compiled) {
      compiled = compile();
    }
    return compiled.call(this, context, options);
  }
t({"people": ['foo','bar']})
Error: Parse error on line 3: {{ #each people }}<li> ---^ Expecting 'ID', got 'undefined'

Π’Π΅ΠΏΠ΅Ρ€ΡŒ пытаСмся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ:

template = "{{#each people }}<li>{{ this}}</li>{{/each}}"
"{{#each people }}<li>{{ this}}</li>{{/each}}"
t = Handlebars.compile(template);
function (context, options) {
    if (!compiled) {
      compiled = compile();
    }
    return compiled.call(this, context, options);
  }
t({"people": ['foo','bar']})
"<li>foo</li><li>bar</li>"

ΠžΠ±Ρ€Π΅Π·ΠΊΠ° Π²Ρ‹Π²ΠΎΠ΄Π° html () Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ эффСкта.

Π’Π°ΠΊ,

  template = $.trim($("#people-in-clients-template").html())
"

{{ #each people }}
<li>{{ this }}</li>
{{ /each }}

"
t = Handlebars.compile(template);
function (context, options) {
    if (!compiled) {
      compiled = compile();
    }
    return compiled.call(this, context, options);
  }
t({"people": ['foo','bar']})
Error: Parse error on line 3: {{ #each people }}<li> ---^ Expecting 'ID', got 'undefined'

ΠŸΠΎΡ…ΠΎΠΆΠ΅, Π² ΠΌΠΎΠ΅ΠΌ шаблонС Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

    template = "{{#each people }}<li>{{ this}}</li>{{/each}}"
"{{#each people }}<li>{{ this}}</li>{{/each}}"
/[\x00-\x1F]/.test(template)
false
template = $("#people-in-clients-template").html()
"

{{ #each people }}
<li>{{ this }}</li>
{{ /each }}

"
/[\x00-\x1F]/.test(template)
true

Π­Ρ‚ΠΎ ΠΊΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ шаблона:

Π° = [10, 10, 123, 123, 32, 35, 101, 97, 99, 104, 32, 112, 101, 111, 112, 108, 101, 32, 125, 125, 10, 123, 123, 32 , 116, 104, 105, 115, 32, 125, 125, 10, 123, 123, 32, 47, 101, 97, 99, 104, 32, 125, 125, 10, 10]

b = "";

for (i = 0; i <a.length; i ++) {
b + = String.fromCharCode (a [i]);
}

Ρ‚ = шаблон ({"люди: ['Ρ„Ρƒ', 'Π±Π°Ρ€']});

Π’ΠΎΡ‚ jsfiddle:

http://jsfiddle.net/8nugY/

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° довольно проста ΠΈ Π½Π΅ связана с Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ символами, Π½ΠΎ ΠΌΠΎΠΉ сСрвСрный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ шаблонов поставил ΠΏΡ€ΠΎΠ±Π΅Π» ΠΏΠ΅Ρ€Π΅Π΄}}.
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, хотя я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΡƒΡ‡ΠΊΠΈ для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° {# each people}}.

      source = $("#people-in-clients-template").html();
      source = source.replace(/ }}/g, "}}");
      source = source.replace(/{{ /g, "{{");

ΠŸΠΎΡ…ΠΎΠΆΠ΅, плохая ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ошибки.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ