#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’ содержит другую частичную часть, вы ее не найдете.