Handlebars.js: Daftarkan variabel global.

Dibuat pada 22 Feb 2016  ·  7Komentar  ·  Sumber: handlebars-lang/handlebars.js

Terkadang berguna untuk memiliki variabel global untuk template.
Beberapa contoh dapat mencakup hal-hal seperti:

  • Objek pengguna aktif.
  • Konfigurasi Aplikasi (judul, deskripsi, meta)
  • Informasi rute (jalur, hash, dll).

Saya berpikir akan keren untuk menambahkan sesuatu seperti:

var hbs = require("handlebars");

hbs.registerGlobal({
   title: "myapp"
});

Yang dapat direferensikan dalam template apa pun, mungkin melalui @global.title , @title atau hanya title .

Pikiran?

docs-needed

Komentar yang paling membantu

@kpdecker template(context, {data: {global: global}}) tidak didokumentasikan secara eksplisit.
Yang paling dekat yang pernah saya lihat adalah template({}, {data: {level: Handlebars.logger.WARN}})

Tetapi dokumentasi tidak menyebutkan bahwa parameter ke-2 dapat diteruskan.

Semua 7 komentar

Saya lebih memikirkan ini dan saya pikir membuat pembantu sebaris dapat melakukan apa yang Anda inginkan.

var hbs = require("handlebars");
var myGlobal = {
   title: "myapp"
};

hbs.registerHelper('global', function(key){
  return myGlobal[key];
});
{{! in your template }}
<div>{{global "title"}}</div>

Dan Anda dapat melakukan apa saja dengan myGlobal
Kamu bisa

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];
});

Tentu saja ada kelemahan seperti kunci Anda ditimpa tetapi hanya itu Anda.

Mendukung ini di dalam Handlebars itu sendiri akan membutuhkan banyak overhead untuk sedikit keuntungan, IMO.

Ada sejumlah opsi seperti saran pembantu @rafde atau meneruskan global di bidang data, yang seharusnya berfungsi dengan sintaks yang diusulkan di atas:

template(context, {data: {global: global}})

Harus mengekspos semua yang ada di jendela di {{@global.foo}} , tetapi saya belum menguji ini dan Anda harus memvalidasi bahwa ini benar-benar berfungsi.

@kpdecker template(context, {data: {global: global}}) tidak didokumentasikan secara eksplisit.
Yang paling dekat yang pernah saya lihat adalah template({}, {data: {level: Handlebars.logger.WARN}})

Tetapi dokumentasi tidak menyebutkan bahwa parameter ke-2 dapat diteruskan.

Dokumentasi kami sering kurang, tetapi jika Anda ingin membantu meningkatkan, itu akan luar biasa.

Ini diuji secara ekstensif: https://github.com/wycats/handbars.js/blob/master/spec/data.js#L1

Mengapa Anda tidak bisa melakukan ini hanya dengan mendefinisikan pasangan kunci/nilai dalam objek non-variabel?

glabalPair = {title: "Title"};

https://github.com/wycats/handbars.js/blob/master/spec/data.js#L1 adalah jawabannya. Menutup ini tetapi dokumentasi masih harus ditambahkan.

Belum didokumentasikan?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat