Регистрация помощников по сборке рулей

#javascript #node.js #handlebars.js #assemble #grunt-assemble

#javascript #node.js #handlebars.js #сборка #grunt-сборка

Вопрос:

Я пытаюсь сделать что-то, что кажется относительно простым из документов Assembly и других репозиториев, на которые я смотрел, но по какой-то причине у меня возникла проблема с регистрацией помощников Handlebars. Помощник находится в помощниках> helper-classgrid.js

 module.exports.register = function (Handlebars, options, params)  { 
  Handlebars.register('classgrid', function (index, options)  { 
    gridclass: function (index, options) {
    if (index === 0 || index % 4 === 0) {
        return options.fn(this);
      }
    return options.inverse(this);
  };
};
  

Мой gruntfile, где config.helpers = помощники:

 assemble: {
      options: {
        layoutdir: '<%= config.guts %>/templates/layouts/',
        assetsDir: '<%= grunt.config.get("assets_dir") %>',
        environmentIsProduction: '<%= grunt.config.get("environmentIsProduction") %>',
        environmentIsDev: '<%= grunt.config.get("environmentIsDev") %>',
        data: ['<%= config.content %>/**/*.json', '<%= grunt.config.get("environmentData") %>'],
        helpers: ['<%= config.helpers %>/helper-*.js']
      },
}
  

Код шаблона:

 {{#classgrid @index}}
// do something here
{{/classgrid}}
  

Теперь, когда я внедряю своего помощника в свой шаблон Handlerbars и запускаю задачу grunt, содержащую задачу сборки, я получаю сообщение об ошибке

 Warning: Missing helper: 'classgrid' Use --force to continue.
  

Я не уверен, что я сделал не так, или мне нужно создать отдельный пакет NPM для моих помощников, который, кажется, предлагается в документах assembly . Я просмотрел эти 2 репозитория, которые, похоже, делают то, что я пытаюсь сделать

https://github.com/buildingblocks/bb-prototype-website/blob/master/Gruntfile.js
https://github.com/ghost-town/layouts-example/blob/master/Gruntfile.js#L33

Ответ №1:

Не уверен, что это была просто проблема с копированием / вставкой, но приведенный выше код выглядит некорректно… вот что должно работать:

 module.exports.register = function (Handlebars, opts, params)  { 
  Handlebars.registerHelper('classgrid', function (index, options)  { 
    if (index === 0 || index % 4 === 0) {
      return options.fn(this);
    }
    return options.inverse(this);
  });
};
  

Я попытаюсь создать тестовый проект, чтобы убедиться, что это работает.

Редактировать: после создания тестового проекта я вижу, что вы использовали Handlebars.register вместо Handlebars.registerHelper . Я обновил код до рабочего решения. Надеюсь, это поможет.

Комментарии:

1. спасибо за ответ. Я попробую. Я думаю, что путаница возникла из ваших документов, если вы посмотрите на пример объекта Params assemble.io/docs/Custom-Helpers.html

2. О, похоже, что пример в документах нуждается в обновлении. Мы скоро перейдем ко всем этим. Дайте мне знать, если то, что указано выше, работает для вас.

3. Привет, все работает, как только я исправил то, что вы предложили, и убрал все мои идиотские опечатки