テンプレートのグローバル変数があると便利な場合があります。
いくつかの例には、次のようなものが含まれます。
次のようなものを追加するのはクールだと思っていました。
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のヘルパー提案やデータフィールドでのグローバルの受け渡しなど、いくつかのオプションがあります。これらは、上記の提案された構文で実際に機能するはずです。
template(context, {data: {global: global}})
{{@global.foo}}
のウィンドウにすべてを公開する必要がありますが、これはテストしていません。これが実際に機能することを検証する必要があります。
@kpdecker template(context, {data: {global: global}})
は明示的に文書化されていません。
私が見た中で最も近いのはtemplate({}, {data: {level: Handlebars.logger.WARN}})
です
ただし、ドキュメントには、2番目のパラメーターを渡すことができるとは記載されていません。
私たちのドキュメントはしばしば不足していますが、あなたが改善を助けたいのであれば、それは素晴らしいでしょう。
これは広範囲にテストされています: 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}})
ですただし、ドキュメントには、2番目のパラメーターを渡すことができるとは記載されていません。