2

Ich baue eine Webanwendung mit Polymer 1.0 und Firebase, und ich möchte die Ansicht ändern, wenn Daten in einen Pfad mit einer Benutzer-ID im Pfad eingegeben wurden. Um das zu tun, möchte ich Folgendes tun:Datenbindung an einen dynamischen Pfad in Polymer

[[question.answers.(user.uid).choice]] 

Lassen Sie mich im Detail erklären. Also, in der Vorlage, habe ich so etwas wie dieses:

<ul id="question-list"> 
    <template is="dom-repeat" items="[[questions]]" sort="_computeSort" as="question"> 
     <li class="card question" data-key="[[question.$key]]" question="[[question]]"> 
     <h3 class="content">[[question.question]]</h3> 
     <p hidden$="[[ MY DATA BINDING HERE ]]">[[question.afterMessage]]</p> 
     </li> 
    </template> 
    </ul> 

Wenn man sich die oben <p> Element suchen, innerhalb der hidden Attribut ist, wo ich Bindung meine Daten haben wollen passieren. Die Struktur eines questions Weg ist wie folgt:

questions data structure

So questions eine Sammlung von Fragen ist, und jede Frage hat eine Eigenschaft afterMessage, die ich den Benutzer nach der Beantwortung der Frage angezeigt werden soll.

Um zu überprüfen, ob der Benutzer die Frage beantwortet hat, habe ich einen Pfad namens answers innerhalb der questions Pfad. Innerhalb dieses answers Pfads habe ich den Schlüssel des Benutzers als einen Schlüssel zu der Wahl, die der Benutzer wählte. So

, wenn ein Benutzer mit Benutzerschlüssel von ZjHDMDa270Uyp6sAL02Mam2ftGf2 in meine App angemeldet ist, werden die Datenpfad-Bindung an diese Antwort des Benutzers wäre:

[[quesion.answers.ZjHDMDa270Uyp6sAL02Mam2ftGf2.choice]] 

Nun ist diese obige Ausdruck ist, was ich binden möchten, aber natürlich ändert sich die Benutzer ID von Benutzer zu Benutzer, also wie kann ich das tun? Mit anderen Worten möchte ich Folgendes tun:

[[question.answers.(user.uid).choice]] 
+0

By the way, habe ich versucht, [[question.answers [[[user.uid]]] .choice – dshukertjr

Antwort

1

Polymerdatenbindungen unterstützen keine Verschachtelung oder Ausdrücke. Sie müssten wahrscheinlich eine computed binding wie folgt verwenden:

// template's computed binding 
[[_getChoice(question, user.uid)]] 

// script 
Polymer({ 
    _getChoice: function(question, uid) { 
    return question.answers[uid].choice; 
    }, 
    ... 
}); 
+0

Wenn die Eigenschaft 'choice' Änderungen, entweder Mit der 'Polymer.Element.set' Methode oder der' Polymer.Element.notifyPath' Methode, um sie zu benachrichtigen, wird Ihre Bindung nicht aktualisiert. – Yairopro

Verwandte Themen