2016-07-12 11 views
0

Aurelia hat String-Interpolation. Wenn Sie eine string, number oder boolean an diese Variable binden, ist das an one-way gebunden.Aurelia Drossel auf Druckwert mit Wertkonverter

Wenn Sie jedoch ein Objekt binden und ein ValueConverter verwenden, wie ich möchte, wird es gebunden one-time.

Wie könnte ich den Wertkonverter verwenden, um one-way anstelle von one-time zu binden?

Ich habe versucht mit ${data | objectPrinter & oneWay}, aber das funktioniert nicht.

Running code can be found on this gist

app.html

<template> 
    <div class="row"> 

<!-- this isn't updated on change     --> 
    <pre>${data | objectPrinter}</pre> 

    </div> 

    <input value.two-way="data.branches"> 

<!-- this gets updated       --> 
    ${data.branches} 

</template> 

app.js

export class App { 
    data = { 
    branches: "test" 
    } 
} 

export class objectPrinterValueConverter { 
    toView(obj){ 
    return JSON.stringify(obj, null, 4); 
    } 
} 

index.html

<!doctype html> 
<html> 
    <head> 
    <title>Aurelia</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    </head> 
    <body aurelia-app> 
    <h1>Loading...</h1> 

    <script src="https://cdn.rawgit.com/jdanyow/aurelia-bundle/v1.0.3/jspm_packages/system.js"></script> 
    <script src="https://cdn.rawgit.com/jdanyow/aurelia-bundle/v1.0.3/config.js"></script> 
    <script> 
     System.import('aurelia-bootstrapper'); 
    </script> 
    </body> 
</html> 

Antwort

3

Aurelia den Text Ihrer binden Ausdrücke in eine abstr parst Akt Syntaxbaum (AST) und verwendet, um zu bestimmen, welche Eigenschaften zu beobachten. Es beobachtet nur die Eigenschaften, auf die im Ausdruck verwiesen wird.

In Ihrem Beispiel sieht der Bindungsausdruck wie folgt aus: data | objectPrinter. Der Ausdruck greift auf die Eigenschaft data im View-Modell zu. Dadurch wird Aurelia die Dateneigenschaft für Änderungen beobachten. Aber es ändert sich nie. In Ihrem Beispiel bleibt die Dateneigenschaft des Ansichtsmodells dieselbe Objektinstanz. Das einzige, was sich ändert, ist die branches-Eigenschaft, auf die im objectPrinter-Ausdruck nicht verwiesen wurde. Daher führen Aktualisierungen nicht dazu, dass diese Bindung erneut ausgewertet wird.

Hier ist ein weiterer Weg, um einen Drucker zu erstellen:

https://gist.run/?id=9eea8902521f4523ee2c

Verbundene Anfrage (ignoriere die akzeptierte Antwort- es nicht in Ihrem Fall funktioniert):

debug Aurelia ViewModel similar to ko.toJson