在 注册过滤器和标签 里介绍过,可以在函数参数里直接获得过滤器的参数:
// Usage: {{ 1 | add: 2, 3 }}
// Output: 6
engine.registerFilter('add', (initial, arg1, arg2) => initial + arg1 + arg2)
但有些过滤器还需要访问当前上下文的变量,比如把 URL 路径转换为完整的 URL 时,需要访问上下文的 origin
变量:
// Usage: {{ '/index.html' | fullURL }}
// Scope: { origin: "https://liquidjs.com" }
// Output: https://liquidjs.com/index.html
engine.registerFilter('fullURL', function (path) {
const origin = this.context.get(['origin'])
return new URL(path, origin).toString()
})
见这个 JSFiddle:http://jsfiddle.net/ctj364up/1/。
箭头函数在箭头函数里
this
会绑定到当前 JavaScript 上下文,你需要用function(){}
来替代()=>{}
语法,才能正确地访问this.context
。