Как получить частичные элементы из шаблона Handlebars

#javascript #node.js #handlebars.js

#javascript #node.js #handlebars.js

Вопрос:

Я хотел бы иметь возможность извлекать из шаблона Handlebars все частичные элементы, на которые ссылаются в нем.

Что-то вроде этого :

 var template = Handlebars.compile('<p>Hello {{> mypartial}}</p>');
console.log(template.partials); // <- i want to print ['mypartial']
  

Ответ №1:

Я некоторое время искал, прежде чем найти ответ на этот вопрос, но он был глубоко в документе handlebars : https://github.com/handlebars-lang/handlebars.js/blob/master/docs/compiler-api.md#ast-visitor

Если вы создаете класс ImportScanner для перегрузки PartialStatement, как в документе :

 var Visitor = Handlebars.Visitor;

function ImportScanner() {this.partials = [];}
ImportScanner.prototype = new Visitor();

ImportScanner.prototype.PartialStatement = function(partial) {
  this.partials.push(partial.name.original);
  Visitor.prototype.PartialStatement.call(this, partial);
};
  

Затем вы можете использовать его для получения всех частичных элементов из проанализированного шаблона :

 var ast = Handlebars.parse('<p>Hello {{> mypartial}}</p>');
var scanner = new ImportScanner();
scanner.accept(ast);
console.log(scanner.partials); // <= print ['mypartial']
  

Но это работает только для частичных элементов первого уровня. Если ‘mypartial’ содержит другую частичную часть, вы ее не найдете.