Handlebars.js: Kesalahan penguraian dengan setiap pembantu: Mengharapkan "ID", tidak terdefinisi

Dibuat pada 29 Jun 2012  ·  6Komentar  ·  Sumber: handlebars-lang/handlebars.js

Saya mendapatkan kesalahan berikut saat mencoba contoh di dokumen:

Kesalahan Tidak Tertangkap: Kesalahan penguraian pada baris 3:
{{ #setiap orang }} -------^
Mengharapkan 'ID', mendapat 'tidak terdefinisi'

feature

Komentar yang paling membantu

Oke, masalahnya sebenarnya cukup sederhana, tidak terkait dengan karakter non-cetak, tetapi mesin templat sisi server saya memberi spasi sebelum }}.
Berikut ini memecahkan masalah, meskipun saya tidak yakin apakah setang harus diperbaiki untuk mengurai {# setiap orang }} dengan benar.

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

Semua 6 komentar

@ustun , Anda harus menunjukkan kepada kami sedikit lebih banyak kode sebelum kami benar-benar dapat men-debug ini dengan benar. Akan sangat membantu jika Anda dapat menyusun jsfiddle untuk ini.

@wagenet Terima kasih atas respon cepatnya. Masalahnya, saya bahkan tidak bisa mendemonstrasikannya, karena sama dengan contoh #each sederhana di halaman utama. Jika saya mencobanya di jsfiddle, atau bahkan di konsol Chrome, memasukkan teks, itu berhasil, tetapi untuk beberapa alasan, teks yang dikembalikan oleh html() gagal. Saya bertanya-tanya apakah entah bagaimana menjadi bingung dengan baris baru.

Berikut adalah sesi konsol. Seperti yang Anda lihat, jika saya memasukkan template secara manual, itu berfungsi.

template = $("#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'

Sekarang mencoba secara manual:

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>"

Memangkas keluaran html() juga tidak berpengaruh.

Jadi,

  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'

Sepertinya ada beberapa data biner di template saya:

    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

Ini adalah charcode dari template yang bermasalah:

a = [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]);
}

t = template({"orang: ['foo','bar']});

Ini jsfiddlenya:

http://jsfiddle.net/8nugY/

Oke, masalahnya sebenarnya cukup sederhana, tidak terkait dengan karakter non-cetak, tetapi mesin templat sisi server saya memberi spasi sebelum }}.
Berikut ini memecahkan masalah, meskipun saya tidak yakin apakah setang harus diperbaiki untuk mengurai {# setiap orang }} dengan benar.

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

Sepertinya pengkodean yang buruk vs bug yang sebenarnya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat