2016-11-11 68 views
0

我试图填充基于thr的结果,我通过iron-ajax从Ajax请求中获取数组 当我尝试访问我的属性时,我的观察窗口显示“不可用”如何更改ajax请求中的聚合物v1.x属性

下面是一个小例子我为重新解释我的问题:

我-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> 

我怎么能如果出现缺的填充我的“城市”属性范围 ?

+0

'handlecities()'需要设置'this.cities'到来自服务器的响应解析的结果。 'this.cities'不需要事先存在。没有更多信息,您的手表表达式问题无法调试。你用什么表情?你在哪里设置了一个断点来查看表达式?什么是设置表达式的目标属性的相关代码? – tony19

回答

0

那么, 经过太多的尝试错误的变化,最后我找到了错误的原因。

65号线:

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

删除了该行,我的所有属性聚合物回归常态。

我在使用那句话,因为我试图重复使用这个组件来处理几个ajax请求。 'handlecities'也被指定为属性,所以是多余的(只有当没有重用的意图时)。我仍然不知道如何重新使用定义自定义处理程序的组件,但由于某种原因,如果我使用上述语句,则所有聚合物属性都会丢失。

所以,在此期间I'm定义几个AJAX组件一个用于每个Ajax请求