如何从 Handlebars 模板中获取零件
How to get partials from a Handlebars template
我希望能够从 Handlebars 模板中提取引用到其中的所有部分。
像这样:
var template = Handlebars.compile('<p>Hello {{> mypartial}}</p>');
console.log(template.partials); // <- i want to print ['mypartial']
我搜索了一段时间才找到那个 awnser,但它在 handlebars 文档的深处:
https://github.com/handlebars-lang/handlebars.js/blob/master/docs/compiler-api.md#ast-visitor
如果您创建 class 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' 包含其他部分,您将找不到它。
我希望能够从 Handlebars 模板中提取引用到其中的所有部分。
像这样:
var template = Handlebars.compile('<p>Hello {{> mypartial}}</p>');
console.log(template.partials); // <- i want to print ['mypartial']
我搜索了一段时间才找到那个 awnser,但它在 handlebars 文档的深处: https://github.com/handlebars-lang/handlebars.js/blob/master/docs/compiler-api.md#ast-visitor
如果您创建 class 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' 包含其他部分,您将找不到它。