2016-11-11 1 views
0

Ich versuche, ein Array in thr Ergebnisse, die ich von einer Ajax-Anfrage über Eisen-Ajax holen Wenn ich versuche, Zugriff auf meine Eigenschaft, meine Watch-Fenster erscheint die Meldung „nicht verfügbar“Wie mutieren Polymer v1.x Eigenschaft in Ajax Anfrage

Unten ist ein kleines Beispiel, das ich für meine erklären Ausgabe neu:

my-component.html

<link rel="import" href="../../bower_components/polymer/polymer.html"> 
<link rel="import" href="../../bower_components/iron-ajax/iron-ajax.html"> 
<link rel="import" href="../../bower_components/app-storage/app-localstorage/app-localstorage-document.html"> 
<link rel="import" href="../../bower_components/paper-dropdown-menu/paper-dropdown-menu.html"> 


<dom-module id="my-component"> 
    <template> 
     <div> 
      <paper-dropdown-menu 
        id="location" label="Ubicaci&oacute;n" 
        value="{{vehicle.location}}"> 
      </paper-dropdown-menu> 
      <paper-dropdown-menu id="city" label="Ciudad"> 
       <paper-menu 
         class="dropdown-content" 
         selected="{{city.city_code}}" 
         attr-for-selected="value" 
         on-iron-select="estadoSeleccionado"> 
        <template id="" is="dom-repeat" items="[[opcionesDisponibilidad]]" as="i"> 
         <paper-item value="[[i.valor]]">[[i.texto]]</paper-item> 
        </template> 
       </paper-menu> 
      </paper-dropdown-menu> 
     </div> 
     <iron-ajax 
       id="ajax" 
       method="GET" 
       url="http://localhost:8080/ws.asmx" 
       params="" 
       content-type="application/x-www-form-urlencoded; charset=UTF-8" 
       handle-as="text" 
       on-response="handlecities" 
       debounce-duration="300"> 
     </iron-ajax> 
     <app-localstorage-document id="localStorageElement" key="myapp.login_data" data="{{loginInfo}}"></app-localstorage-document> 
    </template> 
    <script> 
     Polymer({ 
      is: "my-component", 
      properties:{ 
       vehicle: { 
        type: Object, 
        value:{ 
         id: "", 
         plate: "", 
         location: "" 
        } 
       }, 
       cities:{ 
        notify: true, 
        type: Array, 
        value: [{city_code:'0', city_name:'-'}] 
       } 
      }, 
      ready:function() { 
       this.querycities(); 
      }, 
      querycities: function() { 
       if (this.$.localStorageElement.storage['myapp.login_data']){ 
        this.$.loginInfo = JSON.parse(this.$.localStorageElement.storage['myapp.login_data']); 
       } else return false; 
       this.$.ajax.url = this.$.ajax.url + "/listadoCiudades"; 
       this.$.ajax.verbose = true; 
       this.$.ajax._boundHandleResponse = this.handlecities; 
       this.$.ajax.params = {dispositivo:'12345', credencial: this.$.loginInfo.cred}; 
       this.$.ajax.generateRequest(); 
      }, 
      handlecities: function (request) { 
       console.log(request.response); 
       var xPath = new SoftXpath(); 
       xPath.registerNamespace("",""); 
       xPath.loadXML(request.response); 
       var cities = xPath.selectNodes("//Ciudad//*[self::Codigo|self::Nombre]"); 
       var xPathElement = new SoftXpath(); 
       if (cities){ 
        for(var i = 1; i < cities.length;i++){ 
         var c = new Object(); 
         c.Codigo = cities[i-1].text; 
         c.Nombre = cities[i].text; 

         this.$.cities.push(c);// <---- Here I have not access to my polymer property ' cities '. 

         //How to update my polymer var cities ?? 
         //Tried also with: 
         // this.cities --> undefined 
         // this.$$('#myassignedId').cities --> undefined 
        } 
       } 
      } 
     }) 
    </script> 
</dom-module> 

Wie kann ich meine ‚Städte‘ Eigenschaft bevölkern, wenn erscheint aus Umfang ?

+0

'handlecities()' 'this.cities' muss auf das Ergebnis von der Server-Antwort geparst einzustellen. 'this.cities' muss nicht vorher existieren. Ihr Problem mit dem Watch-Ausdruck ist ohne weitere Informationen nicht debuggbar. Welchen Ausdruck hast du benutzt? Wo haben Sie einen Haltepunkt gesetzt, um den Ausdruck anzuzeigen? Welcher relevante Code legt die Zieleigenschaft des Ausdrucks fest? – tony19

Antwort

0

Nun, Nach zu vielen Try-Error-Variationen, habe ich endlich die Fehlerursache gefunden.

Linie 65:

this.$.ajax._boundHandleResponse = this.handlecities; 

entfernt diese Zeile und alle meine Polymer Attribute zurück zur Normalität.

Ich habe diesen Satz verwendet, weil ich versuchte, die Komponente für mehrere Ajax-Anfragen wiederzuverwenden. 'handlecities' wird ebenfalls als Attribut angegeben, ist also redundant (nur wenn keine Wiederverwendung beabsichtigt ist). Ich weiß immer noch nicht, wie ich die Komponente wiederverwenden kann, die einen benutzerdefinierten Handler definiert, aber aus irgendeinem Grund, wenn ich den obigen Satz verwende, gehen alle Polymereigenschaften verloren.

in der Zwischenzeit So, Im definieren mehr ajax Komponenten einen für jede Anfrage ajax