Aurelia Value Converter,通过解析表达式过滤子属性

Aurelia Value Converter, filtering on sub-properties by parsing expression

我正在尝试创建一个通用过滤器值转换器以在某些情况下使用。我希望能够通过子对象的属性过滤数组中的项目,如下所示:

<li repeat.for="row of router.navigation | filter:'settings.where':'top'" >

我知道我将不得不解析 settings.where 表达式来获取值。到目前为止,我拼凑了以下内容:

import {inject, Parser} from 'aurelia-framework'

@inject(Parser)
export class FilterValueConverter {
  constructor(parser) {
    this.parser = parser;
  }

  toView(array, property, exp) {    
    let expression = this.parser.parse(property);
    return array.filter((item) => expression.evaluate(...?) === exp);
  }
}

parse 似乎给了我一个表达式,但是 Parser 是设计用于核心框架之外的吗? evaluate 需要范围,但我没有范围...我可以遍历表达式树并自己得到结果,但是这样的事情已经存在了吗?

这是从 aurelia blog post about value converters:

中截取的

也许这对您有帮助,考虑到这一点,您应该能够在不使用引号的情况下使用您的示例:

<li repeat.for="row of router.navigation | filter:settings.where:'top'" >

我终于有机会查看框架源码了。下面的代码似乎有效。范围只需要 bindingContext:

import {inject, Parser} from 'aurelia-framework'

@inject(Parser)
export class FilterValueConverter {
  constructor(parser) {
    this.parser = parser;
  }

  toView(array, property, exp) {    
    let expression = this.parser.parse(property);
    return array.filter((item) => expression.evaluate({bindingContext:item}) === exp);
  }
}