2016-03-21 2 views
1

So aus der folgenden docs https://www.polymer-project.org/1.0/docs/devguide/properties.html#deep-sub-property-changes-on-array-itemsPolymer 1 get Element aus tiefer Unter Eigenschaft ändert Pfad

ich den folgenden Code aus:

  properties:{ 
       skills:{ 
        type:Array, 
        notify: true, 
        value: [ 
         { 
          id:1, 
          name:"UNOOOOOO", 
          description: "aaa a a aa a aaaa adicionales con el fin de exceder sus expectativas y "+ 
          "mejorar su calidad de vida. La orientación al "+ 
          "cliente es una actitud permanente que caracteriza a la persona." 
         }, 
         { 
          id:2, 
          name:"Capacidad para plantear identificar y resolver problemas", 
          description: "aaa a a aa a aaaa adicionales con el fin de exceder sus expectativas y "+ 
          "mejorar su calidad de vida. La orientación al "+ 
          "cliente es una actitud permanente que caracteriza a la persona." 
         } 
        ] 
       } 
      }, 
      observers: [ 
       'skillIsSelectedChanged(skills.*)' 
      ], 
      skillIsSelectedChanged: function(changeRecord){ 
       console.log(changeRecord); 
      } 

Ich bin in der Lage den Rückruf durch die Daten zu erhalten Updates zu binden. : D

Object {path: "skills.#0.isSelected", value: true, base: Array[2]} 

Meine Frage ist: Gibt es eine saubere Art und Weise den ‚id‘ des Objekts zu erhalten, die durch die # 0 verwiesen wird?

Ich meine, ich könnte etwas tun, den String zu analysieren und zu erhalten, die ‚0‘ konvertiert sie dann in einer ganzen Zahl und dann die Objekt-ID wie diese:

this.skills[varWith0].id 

Aber das fühlt sich nicht wie die richtiger sauberer Weg. Ich habe auch das Gefühl, dass dies eine gemeinsame Sache wäre.

Also gibt es einen sauberen Weg, dies zu tun?

Danke

+0

verwenden Debugger .. blättern durch lange Liste o f objekte dort auf "obj updated" .siehe wenn du ref auf die id irgendwo finden kannst –

+0

Danke für die Antwort! Ich bin mir nicht sicher ob ich das verstehe. Was ist "obj aktualisiert"? Wo und wie finde ich es? Danke – Alejandro

Antwort

0

Ok .. ich meinen eigenen Code schreiben beschlossen, das Problem zu lösen. Wie ich schon sagte, ich denke, es sollte einen guten Weg geben, es zu tun. Trotzdem funktioniert das auch.

  skillIsSelectedChanged: function(changeRecord){ 
       //primero tenemos que obtener la posicion del skill que cambio. 
       //path nos da un string asi: skills.#0.isSelected donde el 0 despues del # es la posicion. 
       //por otro lado cuando se cargan los elementos inicialmente tambien llama este callback 
       //pero con un string en path asi: skills 

       //primero hacemos split en #. 
       var arr = changeRecord.path.split("#"); 

       //luego si el length del arreglo es mayor a 1 estamos en el caso que nos interesa. 
       if(arr.length > 1){ 
        //como desconocemos el largo del numero, le volvemos e hacer un split al arr[1] en '.' 
        //de ese segundo arreglo resultante, la posicion 0 es el numero deseado. Ese lo convertimos en int 
        var arr2 = arr[1].split("."); 
        var position = parseInt(arr2); 

        //finalmente buscamos en skills el id del objeto en la posicion obtenida 
        var id = this.skills[position].id; 

        //lo metemos en el arreglo de respuesta 
        this.responseSkills.push(id); 
       } 
      } 

weiß, dass ich die Kommentare in Spanisch (über das sorry), aber für Leute, die den Code nicht verstehen Spanisch ist sehr einfach. Hoffe, es hilft

1

Es gibt eine get Methode auf dem Prototyp des Elements, die verwendet werden kann, um Werte nach Pfad abzurufen. Wenn Sie den Pfad haben, können Sie den Wert abrufen.

if (changeRecord.path.indexOf('.isSelected') >= 0) { 
    var itemPath = changeRecord.path.replace('.isSelected', ''); 
    var item = this.get(itemPath); 
} 

Es ist auch praktisch zu wissen, dass Sie den Pfad als ein Array von Pfaden oder Pfadsegmente passieren können, so könnten Sie auch tun:

var parts = changeRecord.path.split('.'); 
var last = parts.pop(); 
if (/* last is something interesting */) { 
    var item = this.get(parts); 
} 

Wenn Sie sicher, dass Datenbindungen und Beobachter machen wollen Update, Sie wollen auch this.push und this.splice benutzen, um Ihre responseSkills Array zu aktualisieren, so Code Ende etwas aussehen könnte:

if (changeRecord.path.indexOf('.isSelected') >= 0) { 
    var itemPath = changeRecord.path.replace('.isSelected', '.id'); 
    var id = this.get(itemPath); 
    if (changeRecord.value) { 
    this.push('responseSkills', id); 
    } else { 
    for (var i=0; i<this.responseSkills.length; i++) { 
     if (this.responseSkills[i] == id) { 
     this.splice('responseSkills', i, 1); 
     break; 
     } 
    } 
    } 
} 
Verwandte Themen