لقد تلقيت الخطأ التالي أثناء تجربة المثال الموجود في المستندات:
خطأ لم يتم تسجيله: خطأ في التحليل في السطر 3:
{{ #كل الناس }}
توقع "معرف" ، وحصلت على "غير محدد"
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:
حسنًا ، المشكلة بسيطة جدًا في الواقع ، ولا تتعلق بأحرف غير مطبوعة ، لكن محرك القوالب من جانب الخادم الخاص بي وضع مسافة قبل}}.
يحل ما يلي المشكلة ، على الرغم من أنني لست متأكدًا مما إذا كان يجب إصلاح المقاود لتحليل {# كل شخص}} بشكل صحيح.
source = $("#people-in-clients-template").html();
source = source.replace(/ }}/g, "}}");
source = source.replace(/{{ /g, "{{");
يبدو أنه تشفير سيئ مقابل خطأ حقيقي.
التعليق الأكثر فائدة
حسنًا ، المشكلة بسيطة جدًا في الواقع ، ولا تتعلق بأحرف غير مطبوعة ، لكن محرك القوالب من جانب الخادم الخاص بي وضع مسافة قبل}}.
يحل ما يلي المشكلة ، على الرغم من أنني لست متأكدًا مما إذا كان يجب إصلاح المقاود لتحليل {# كل شخص}} بشكل صحيح.