Handlebars.js: خطأ في التحليل مع كل مساعد: توقع "ID" ، لم يتم تعريفه

تم إنشاؤها على ٢٩ يونيو ٢٠١٢  ·  6تعليقات  ·  مصدر: handlebars-lang/handlebars.js

لقد تلقيت الخطأ التالي أثناء تجربة المثال الموجود في المستندات:

خطأ لم يتم تسجيله: خطأ في التحليل في السطر 3:
{{ #كل الناس }} ------- ^
توقع "معرف" ، وحصلت على "غير محدد"

feature

التعليق الأكثر فائدة

حسنًا ، المشكلة بسيطة جدًا في الواقع ، ولا تتعلق بأحرف غير مطبوعة ، لكن محرك القوالب من جانب الخادم الخاص بي وضع مسافة قبل}}.
يحل ما يلي المشكلة ، على الرغم من أنني لست متأكدًا مما إذا كان يجب إصلاح المقاود لتحليل {# كل شخص}} بشكل صحيح.

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

ال 6 كومينتر

ustun ، ستحتاج إلى إظهار المزيد من التعليمات البرمجية قبل أن نتمكن من تصحيح هذا الأمر بشكل صحيح. سيكون من المفيد جدًا أن تقوم بتجميع jsfiddle لهذا الغرض.

@ فاجينت شكرا على الاستجابة السريعة. المشكلة هي أنني لا أستطيع حتى إثبات ذلك ، لأنه مماثل لمثال #each البسيط في الصفحة الرئيسية. إذا جربته في jsfiddle ، أو حتى على وحدة تحكم Chrome ، فإن إدخال النص يعمل ، ولكن لسبب ما ، يفشل النص الذي تم إرجاعه بواسطة html (). أتساءل عما إذا كان يتم الخلط بينه وبين الأسطر الجديدة.

هنا جلسة وحدة التحكم. كما ترى ، إذا قمت بإدخال القالب يدويًا ، فإنه يعمل.

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'

نحاول الآن يدويًا:

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]

ب = "" ؛

لـ (i = 0 ؛ i <a.length ؛ i ++) {
ب + = String.fromCharCode (a [i]) ؛
}

t = template ({"people: ['foo'، 'bar']}) ؛

هنا هو jsfiddle:

http://jsfiddle.net/8nugY/

حسنًا ، المشكلة بسيطة جدًا في الواقع ، ولا تتعلق بأحرف غير مطبوعة ، لكن محرك القوالب من جانب الخادم الخاص بي وضع مسافة قبل}}.
يحل ما يلي المشكلة ، على الرغم من أنني لست متأكدًا مما إذا كان يجب إصلاح المقاود لتحليل {# كل شخص}} بشكل صحيح.

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

يبدو أنه تشفير سيئ مقابل خطأ حقيقي.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات