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