من المفيد أحيانًا أن يكون لديك متغيرات عامة للقوالب.
يمكن أن تتضمن بعض الأمثلة أشياء مثل:
كنت أفكر أنه سيكون من الرائع إضافة شيء مثل:
var hbs = require("handlebars");
hbs.registerGlobal({
title: "myapp"
});
والتي يمكن الإشارة إليها في أي قالب ، ربما عبر @global.title
أو @title
أو فقط title
.
أفكار؟
كنت أفكر في هذا أكثر وأعتقد أن إنشاء مساعد مضمّن يمكنه فعل ما تريد.
var hbs = require("handlebars");
var myGlobal = {
title: "myapp"
};
hbs.registerHelper('global', function(key){
return myGlobal[key];
});
{{! in your template }}
<div>{{global "title"}}</div>
ويمكنك فعل أي شيء باستخدام myGlobal
يمكنك
define('myGlobal', function(){
return {
title: "myapp"
};
});
...
var myGlobal = require('myGlobal');
myGlobal['newKey'] = 'something';
...
var hbs = require("handlebars");
var myGlobal = require('myGlobal');
hbs.registerHelper('global', function(key){
return myGlobal[key];
});
بطبيعة الحال ، هناك عيب مثل الكتابة فوق المفاتيح ولكن هذا كل ما عليك.
سيتطلب دعم هذا داخل المقاود نفسها الكثير من النفقات العامة لتحقيق مكاسب قليلة ، IMO.
هناك عدد من الخيارات مثل اقتراحrafde 's المساعد أو تمرير عالمي في حقل البيانات ، والذي يجب أن يعمل بالفعل مع بناء الجملة المقترح أعلاه:
template(context, {data: {global: global}})
يجب أن يعرض كل شيء على النافذة في {{@global.foo}}
، لكنني لم أختبر ذلك وستحتاج إلى التحقق من أن هذا يعمل بشكل صحيح.
kpdecker template(context, {data: {global: global}})
غير موثق بشكل صريح.
أقرب ما رأيته هو template({}, {data: {level: Handlebars.logger.WARN}})
لكن الوثائق لا تذكر أنه يمكن تمرير المعامل الثاني .
غالبًا ما نفتقر إلى وثائقنا ، ولكن إذا كنت ترغب في المساعدة في التحسين ، فسيكون ذلك رائعًا.
تم اختبار هذا على نطاق واسع: https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1
لماذا لا يمكنك القيام بذلك ببساطة عن طريق تحديد زوج المفتاح / القيمة في كائن غير متغير؟
glabalPair = {title: "Title"};
https://github.com/wycats/handlebars.js/blob/master/spec/data.js#L1 كان الجواب. إغلاق هذا ولكن لا يزال ينبغي إضافة الوثائق.
غير موثق بعد؟
التعليق الأكثر فائدة
kpdecker
template(context, {data: {global: global}})
غير موثق بشكل صريح.أقرب ما رأيته هو
template({}, {data: {level: Handlebars.logger.WARN}})
لكن الوثائق لا تذكر أنه يمكن تمرير المعامل الثاني .