1

Ich habe einen Dart-Server auf AppEngine und einem Dart-Polymer-Client ausgeführt. Die Idee war, eine gemeinsame Logik wie die Modelle zu teilen. Es gibt jedoch ein kleines Problem. Normalerweise würden Sie Ihre Modellklassen erweitern JsProxy und dann alle relativen Felder mit @reflectable annotieren, um sie in der Datenbindung zu verwenden. Leider erbt das Modell, das mit dem Datenspeicher von AppEngine arbeitet, bereits von Model. Außerdem bin ich mir nicht sicher, ob dart:js auf dem Server verfügbar ist. Daher muss ich einen anderen Weg finden, um mein Modell für die Benutzeroberfläche reflektierbar zu machen.Machen Dart-Polymer-Modell-Klasse reflektierbar ohne JsProxy

Das Kommentieren von Projekt # name mit @reflectable hat nicht funktioniert. Gleiches leeres div als Ausgabe.

Wenn einschließlich JsProxy im Modell:

Die integrierte Bibliothek 'Dart: html' ist auf dem Stand-alone VM nicht zur Verfügung.

Irgendwelche Ideen?

@Kind(name: 'Project', idType: IdType.Integer) 
class Project extends Model { 

    @StringProperty(required: true) 
    String name; 

} 

@PolymerRegister('project-list') 
class ProjectList extends PolymerElement { 

    @property List<Project> projects; 

    ProjectList.created() : super.created(); 

    ready() { 
    fetchProjects(); 
    } 
} 

<dom-module id="projects-page"> 
    <template> 
    <template is="dom-repeat" items="{{projects}}"> 
     <div>{{item.name}}</div> 
    </template> 
    </template> 
</dom-module> 

Ausgang:

<div></div> 

Antwort

1

Dies ist ein bekanntes Problem https://github.com/dart-lang/polymer-dart/issues/664

Die beste Abhilfe so weit ist Proxy-Objekte zu verwenden, wo die Anmerkungen angewendet werden und dass die gemeinsamen Modellklassen wickeln.

class FooProxy extends JsProxy implements Foo { 
    final Foo model; 

    FooProxy(this.model); 

    @reflectable 
    int get bar => model.bar; 
    set(int value) { model.bar = value} 
} 
+1

Danke! Funktioniert, aber es ist super hässlich. –

+0

Yup: - /, wir hoffen, dass dies schließlich verbessert wird. –