Handlebars.js: tidak dapat menggunakan string bilangan bulat sebagai id

Dibuat pada 27 Jun 2011  ·  10Komentar  ·  Sumber: handlebars-lang/handlebars.js

Ini adalah beberapa jam pertama saya bekerja dengan Handlebars, jadi saya mungkin melewatkan sesuatu, tapi.....

Dengan data seperti ini: {status: {"200": 4, "304": 10}} tampaknya seseorang tidak dapat mengakses entri tersebut dengan representasi string bilangan bulat sebagai kunci. Template ini tidak berfungsi untuk saya (menggunakan paket 1.0.3beta):

{{#dengan status}}
{{#jika 200}} Oke: {{ 200 }} {{/jika}}
{{/dengan}}

{{ 200 }} menghasilkan kesalahan Parse "EXPECTING ID". Hal yang sama terjadi ketika template berisi: {{ "200" }}. Anehnya {{#if 200}} tampaknya berfungsi dengan baik.

bug

Komentar yang paling membantu

baik untuk mengetahui tanda kurung membantu sebagai solusi, tetapi saya ingin menunjukkan bahwa perilaku ini merusak kompatibilitas mundur dengan kumis.

Saya memiliki templat kumis tempat saya akan mengakses elemen array dengan indeks literal dengan menulis:

{{someArray.0}}

Namun, ketika saya mencoba memigrasikan aplikasi saya dari kumis ke setang (dengan asumsi semua templat berfungsi), saya menemukan banyak kesalahan

`Mengharapkan 'ID', mendapatkan 'BINTANG'``

Untungnya, mengubah ekspresi itu menjadi

{{someArray.[0]}}

memperbaiki masalah. mungkin perlu sedikit memperluas bahasa untuk mendukung ungkapan ini untuk kompatibilitas kumis.

Terima kasih

Semua 10 komentar

Di Handlebars, bilangan bulat tokenize sebagai INTEGER. Anda dapat membuat urutan karakter apa pun berfungsi dengan mengelilinginya dalam tanda kurung:

{{#with status}}
  {{#if [200] }} OK: {{ [200] }} {{/if}}
{{/with}}

baik untuk mengetahui tanda kurung membantu sebagai solusi, tetapi saya ingin menunjukkan bahwa perilaku ini merusak kompatibilitas mundur dengan kumis.

Saya memiliki templat kumis tempat saya akan mengakses elemen array dengan indeks literal dengan menulis:

{{someArray.0}}

Namun, ketika saya mencoba memigrasikan aplikasi saya dari kumis ke setang (dengan asumsi semua templat berfungsi), saya menemukan banyak kesalahan

`Mengharapkan 'ID', mendapatkan 'BINTANG'``

Untungnya, mengubah ekspresi itu menjadi

{{someArray.[0]}}

memperbaiki masalah. mungkin perlu sedikit memperluas bahasa untuk mendukung ungkapan ini untuk kompatibilitas kumis.

Terima kasih

@santip saya bingung. Kumis tidak mendukung jalur sama sekali, jadi bagaimana Anda bisa melakukan {{someArray.0}} di kumis?

aww, buruk, ok, saya sebenarnya menggunakan hogan.js dan tidak tahu itu tidak didukung pada kumis.

btw, ketika bermigrasi dari hogan.js saya juga memperhatikan bahwa bubbling tampaknya tidak berfungsi seperti di hogan (atau kumis):

Handlebars.compile('aaa {{a}} {{#b}}{{c}}{{d}}{{/b}}')({a:1, b:[{c:2}], d:3}) == 'aaa 1 2'

Hogan.compile('aaa {{a}} {{#b}}{{c}}{{d}}{{/b}}').render({a:1, b:[{c:2}], d:3}) == 'aaa 1 23'

Mustache.render('aaa {{a}} {{#b}}{{c}}{{d}}{{/b}}', {a:1, b:[{c:2}], d:3}) == 'aaa 1 23'

Ini berfungsi ketika saya menggunakan ../ yang merupakan alasan mengapa saya beralih ke Handlebars tetapi saya pikir itu layak untuk menunjukkan kurangnya kompatibilitas di sana.

Saya juga baru saja menguji kumis dan sepertinya mendukung jalur

Mustache.render('aaa {{a}} {{b.c}}', {a:1, b:{c:2}, d:3}) == 'aaa 1 2'

Ya, kumis mendukung jalan. Periksa # Nama Bertitik di https://github.com/mustache/spec/blob/master/specs/sections.yml

Sepertinya kumis telah menambahkan fitur. Saya tidak yakin apakah saya mendaftar untuk melacak spesifikasi Kumis selamanya :/

Sepertinya spesifikasi Kumis tidak menjelaskan perilaku untuk .<integer> . Saya pasti bisa membuat ini berfungsi, meskipun foo.[anything] Handlebars berfungsi lebih baik untuk jalur non-identifier.

Rencana awal saya adalah "jika itu adalah jalur titik yang valid di JS, itu berfungsi di Handlebars".

Apakah ada alasan mengapa Anda tidak dapat mendukung notasi jalur .<integer> ?

Saya tidak berpikir Anda harus mendukung bubbling karena mungkin akan merusak banyak templat setang yang ada, meskipun Anda mungkin harus memperbarui dokumen dan situs untuk menginformasikan tentang ketidakcocokan ini untuk menghemat sakit kepala bagi orang yang melakukan migrasi.

Saya mengalami ini ketika mencoba menggunakan pengidentifikasi dalam bentuk {{1}} , yang dikompilasi dengan baik di Kumis dan Hogan tetapi membuang Expecting 'ID', 'DATA', got 'NUMBER' di Handlebars. Meskipun saya ingin bilangan bulat didukung, saya benar-benar memahami dan mendukung pendekatan @wycats yang hanya menggunakan sintaks jalur titik JS yang valid.

Namun, saya pikir dokumen harus mencerminkan hal ini. Mereka saat ini menyatakan:

Identifiers may be any unicode character except for the following:
Whitespace ! " # % & ' ( ) * + , . / ; < = > @ [ \ ] ^ ` { | } ~

yang menurut saya menyesatkan karena bilangan bulat tidak valid. Jauh lebih jelas untuk mengatakan "jika itu adalah jalur titik yang valid di JS, itu berfungsi di Handlebars", seperti yang disarankan.

http://handbarsjs.com/expressions.html

Apakah halaman ini membantu?
0 / 5 - 0 peringkat