2014-04-09 6 views
8

Ich arbeite an einem Widget, das Informationen von Drittanbietern aus einer Datenbank mithilfe von Json extrahiert. Sobald die Informationen gesammelt sind, plane ich, die Informationen durchzugehen und den erforderlichen HTML-Code zu erstellen und über eine {{variable}} in die Vorlage einzufügen.Polymer: Wie HTML zu Bildschirm zu loopen und zu rendern

Jetzt bekomme ich ein unerwartetes Ergebnis. Wenn ich das tue, wird das HTML als Text angezeigt.

Hier einige sudo-Code der Emission:

"<div>Name 1</div>" "<div>Name 2</div>" ... n 

statt:

 <polymer-element name="loop-element"> 
      <template> 
        {{customerList}} 
      </template> 
      <script> 
       Polymer('loop-element', { 
        ready: function() { 
         this.loadCustomerList(); 
        } 
        customerList:"Loading customer list...", 

        loadCustomerList: function() { 
         CustomerNameArray[] = //Get the array from jSon file 
         i = 0; 
         do { 
          this.customerList = "<div>" + customerNameArray[i] + "</div>"; 
         } while (customerNameArray[i]); 
        } 

       }); 

      </script> 
     </polymer-element> 

Im Wesentlichen werden die DIV die nicht gerendert werden, anstatt sie auf dem Bildschirm als Text gedruckt werden

Sie können ein JSBin-Beispiel hier sehen: http://jsbin.com/tituzibu/1/edit

Kann jemand empfehlen, wie man eine Liste zur Vorlage ausgibt?

+1

Sie können nicht HTML-Code direkt an DOM binden. Als Sicherheitsvorkehrung ist es immer maskiert. Wenn Sie dies heute tun müssen, müssen Sie dies zwingend tun, 'this.innerHTML = someHtml;' oder gleichwertig. –

Antwort

10

Sie sollten die DOM-basierten Datenbindungsfunktionen von Polymer verwenden, anstatt das Markup selbst zu erstellen.

<template repeat="{{customer, i in customers}}"> 
    <div>{{i}}, {{customer.name}}</div> 
</template> 

http://www.polymer-project.org/docs/polymer/databinding.html#an-example

+1

Danke Eric, das hat gut funktioniert. Ich denke, ein großer Teil des Kampfes besteht darin, die Begriffe zu verstehen, die bei der Polymerentwicklung verwendet werden und wie man nach dem richtigen Referenzmaterial sucht. – HappyCoder

+1

Ein Glossar ist keine schlechte Idee. Welche anderen Dinge würden dein Leben leichter machen? Ich würde es gerne wissen, damit wir die Dokumente verbessern können. Fühlen Sie sich frei, ein Problem zu notieren: https://github.com/polymer/docs/issues?state=open – ebidel

+2

Nun, wenn Polymer auf CodeCademy.com wäre, wäre das ein guter Start. Die Lehrmethode ist so einfach, dass sie funktioniert und gut funktioniert. Definitiv wäre ein Glossar von Begriffen toll, die Hälfte der Zeit weiß ich nicht, was ich das {{dingy}} nennen oder den "direktiven Teil" aufzeigen oder die Reihenfolge verstehen soll, die die Dinge laden ... bisher war es Versuch und Fehler (aber Spaß). Ich weiß immer noch nicht, wie man die Polymer-Project.com Seite benutzt :) Ich normalerweise Google: "Term + Polymer Project" und hoffe, es findet die richtige Seite auf der Seite. Aber was ich wirklich lieben würde, wäre eine Liste einfacher bis komplexer Tutorials. – HappyCoder

1

Vielleicht ein wenig zu spät ... Wenn Sie Ihren Ansatz haften möchten könnten Sie this.injectBoundHTML verwenden:

<polymer-element name="loop-element"> 
      <template> 
        <div id='customerList'> </div> 
      </template> 
      <script> 
       Polymer('loop-element', { 
        ready: function() { 
         this.loadCustomerList(); 
        } 
        customerList:"Loading customer list...", 

        loadCustomerList: function() { 
         CustomerNameArray[] = //Get the array from jSon file 
         i = 0; 
         do { 
          this.customerList = "<div>" + customerNameArray[i] + "</div>"; 
         } while (customerNameArray[i]); 
         this.injectBoundHTML(this.customerList, 
         this.$.customerList); 
        } 

       }); 

      </script> 
     </polymer-element> 

jedoch der erste Ansatz besser ist ..

11

Polymer v.1.0

/* relative path to polymer.html*/ 
<link rel="import" href="../bower_components/polymer/polymer.html"> 

<dom-module id="employee-list"> 
    <style> 
     /* CSS rules for your element */ 
    </style> 
    <template> 
     <div> Employee list: </div> 
     <template is="dom-repeat" items="{{employees}}"> 
      <div>First name: <span>{{item.first}}</span></div> 
      <div>Last name: <span>{{item.last}}</span></div> 
     </template> 
    </template> 
</dom-module> 

<script> 
    Polymer({ 
     is: 'employee-list', 
     ready: function() { 
      this.employees = [ 
       {first: 'Bob', last: 'Smith'}, 
       {first: 'Sally', last: 'Johnson'} 
      ]; 
     } 
    }); 
</script> 

doc