2014-12-09 15 views
7

nel mio test, ho 3 elementi importati dal file HTML principale:Polymer globali attributi qualcosa di strano

<html><head><title>my-app</title> 
    <script src="bower_components/webcomponentsjs/webcomponents.min.js"></script> 
    <link rel="import" href="elements/app-globals.html"> 
    <link rel="import" href="/Polymer/my-app/elements/my-categories.html"> 
    <link rel="import" href="/Polymer/my-app/elements/my-items.html"> 
    </head> 
    <body> 
    <my-categories></my-categories> 
    <my-items></my-items> 
    </body> 
</html> 

con 'app-globals.html' essere:

<link rel="import" href="../bower_components/polymer/polymer.html"> 
<polymer-element name="app-globals" attributes="data selectedCategoryId selectedItemId"> 
    <script> 
    (function() { 
    var values = {}; 
    Polymer('app-globals', { 
     ready: function() { 
      console.log("app-globals -> ready"); 
      this.values = values; 
      console.dir(this.values); 
     }, 
    }); 
    })(); 
    </script> 
</polymer-element> 

'my- categories.html ':

<link rel="import" href="../bower_components/polymer/polymer.html"> 
<link rel="import" href="/Polymer/my-app/elements/app-globals.html"> 

<polymer-element name="my-categories"> 
    <template> 
    <app-globals id="globals"></app-globals> 
    <div>selectedCategoryId = {{$.globals.values.selectedCategoryId}}</div> 
    <ul> 
     <template repeat="{{category in categories}}"> 
     <li class="li-category" data-_id="{{category._id}}" on-tap="{{selectCategory}}">{{category.name}}</li> 
     </template> 
    </ul> 
    </template> 
    <script> 
    Polymer('my-categories', { 
    values: {}, 
    ready: function() { 
     var HOST = 'xxx.yyy.zzz.www'; 
     var PORT = '8888'; 
     this.categories = <loaded from websocket>; 
    }, 
    selectCategory: function(event, detail, sender) { 
     var elt = (event.target.nodeName == 'INPUT')? event.target.parentNode : event.target; 
     this.values.selectedCategoryId = elt.dataset._id; 
     this.$.globals.values.selectedCategoryId = elt.dataset._id; 
     return false; 
    } 
    }); 
    </script> 
</polymer-element> 

qui quando uno degli elementi li si fa clic il 'selectedCategoryId' viene aggiornato.

questo valore viene passato attraverso globali per l'ultimo elemento 'my-items.html':

<link rel="import" href="../bower_components/polymer/polymer.html"> 
<link rel="import" href="/Polymer/my-app/elements/app-globals.html"> 

<polymer-element name="my-items"> 
    <template> 
    <app-globals id="globals"></app-globals> 
    <style> 
    </style> 
    <div >selectedCategoryId = {{$.globals.values.selectedCategoryId}}</div> 
    <ul> 
     <template repeat="{{item in items}}" 
       on-category-tap="{{handleCategoryTap}}"> 
     <li class="li-item" data-_id="{{item._id}}" on-click="{{selectItem}}">{{item.title}}</li> 
     </template> 
    </ul> 
    </template> 
    <script> 
    Polymer('my-items', { 
    values: {}, 
    ready: function() { 
     var HOST = 'xxx.yyy.zzz.www'; 
     var PORT = '8888'; 
     console.log("'my-items' -> this.$.globals.values:"); 
     console.dir(this.$.globals.values); 
     for(var prop in this.$.globals.values) { 
     if(this.$.globals.values.hasOwnProperty(prop)) { 
      console.log("this.$.globals.values[" + prop + "] = " + this.$.globals.values[prop] + ""); 
     } 
     } 
     console.log("'my-items' -> this.$.globals.values.selectedCategoryId = " + this.$.globals.values.selectedCategoryId); 
    }, 
    handleCategoryTap: function(event) {..., 
    selectItem: function(event) {...} 
     return false; 
    } }); 
    </script> 

conseguente qualcosa di strano per me: (.. Questo $ globals.values) console.dir dare me la respons correcte: object { selectedCategoryId: "547dfb6578be56f6630041a8" }

Tuttavia selezionando questo attributo risultati 'selectedCategoryId' con:.. console.log (" 'my-oggetti' -> questo $ globals.values .selectedCategoryId = "+ questo. $ .globals.values.selectedCategoryId); mi restituisce: "my-items" -> this. $. Globals.values.selectedCategoryId = non definito undefined perché?

+0

credo che la parte omessa del codice nell'esempio dato ha rilevanza del problema che si sta affrontando. E non penso nell'esempio dato 'console.dir (this. $. Globals.values);' stamperà 'Object {selectedCategoryId:" 547dfb6578be56f6630041a8 "}' poiché a quel punto il 'this. $. Globals.values 'ancora ricevuto il valore. – xbtsw

risposta