2016-04-07 3 views
1

Ich versuche, einen generischen Filter Value Converter in einigen Fällen zu verwenden. Ich möchte in der Lage Filter werden die Elemente im Array von Eigenschaften auf Unter Objekte wie folgt aus:Aurelia Value Converter, filtert Sub-Eigenschaften durch Parsing Ausdruck

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

Ich weiß, ich werde den settings.where Ausdruck haben, zu analysieren, um den Wert zu erhalten. Bisher habe ich gebastelt folgende:

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); 
    } 
} 

Die parse erscheint mir einen Ausdruck zu geben, sondern wurde der Parser entwickelt, um außerhalb des Kerns Rahmen verwendet werden? evaluate erfordert einen Bereich und ich habe keinen von denen ... Ich könnte den Ausdrucksbaum laufen und das Ergebnis selbst erhalten, aber existiert so etwas schon?

Antwort

0

Endlich hatte ich die Chance, die Framework-Quelle zu betrachten, in der ich fast schon da war. Der folgende Code scheint zu funktionieren. Scope benötigt einfach eine 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); 
    } 
} 
1

Dies ist ein von einem aurelia blog post about value converters snipped:

enter image description here

Vielleicht hilft Ihnen, mit diesem Gedanken sollten Sie in der Lage sein, Ihr Beispiel ohne Anführungszeichen nur zu verwenden:

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

+0

Dieses Beispiel zeigt, wie ein einzelner Untereigenschaftswert an den Wertkonverter übergeben wird. Ich versuche, einen Pfad zu übergeben, der für jedes Element im Array ausgewertet werden kann, und verwendet, um jedes von ihnen zu filtern. – Tim

+0

Können Sie etwas mehr erklären, was Sie erreichen möchten und wie diese Pfade aussehen, die Sie ausgewertet werden möchten? – kabaehr

+0

Ich habe einen Filterwertkonverter wie der in dieser Antwort: http://stackoverflow.com/a/29163491/106623. Es verwendet 'item [property]', um einen Wert für jedes Element zu erhalten, mit dem verglichen werden soll. Dies funktioniert nicht für die Untereigenschaften 'item ['settings.where']' als ungültiges JavaScript für den Zugriff auf 'item.settings.where'. Der Parser in aurelia kann "settings.where" bereits in einen Ausdruck einlesen, aber ich kann es nicht ohne einen Bereich auswerten. – Tim