2015-07-19 105 views
0

我是聚合物的新手,我試圖創建一個接受請求併發迴響應的自定義服務。但是,即使我可以看到服務頁面中正在設置對象,我仍然面臨訪問響應對象的問題。聚合物1.0數據綁定和訪問ajax響應對象

請參閱服務代碼:X-custom.html

<link rel="import" href="bower_components/polymer/polymer.html"> 
 
<link rel="import" href="bower_components/iron-ajax/iron-ajax.html"> 
 

 
<dom-module id="x-custom"> 
 
<style> 
 
</style> 
 
<template> 
 
<iron-ajax 
 
     id="ajax" 
 
     url="" 
 
     handle-as="json" 
 
     on-response="hresponse" 
 
     debounce-duration="300"> 
 
</iron-ajax> 
 

 
</template> 
 
<script> 
 

 
    Polymer({ 
 

 
    is: 'x-custom', 
 
\t properties: { 
 
     user: String, 
 
     responseData:{ 
 
     type:Object, 
 
     notify:true 
 
     } 
 

 
    }, 
 

 
attached: function() { 
 
     this.$.ajax.url = "http://myapitesing/api/users/"+this.user; 
 
     this.$.ajax.generateRequest(); 
 
    }, 
 

 
    hresponse: function(request) { 
 
     // Make a copy of the loaded data 
 
     respObj = request.detail.response; 
 
     if(respObj){ 
 
      //console.log(respObj); 
 
      this.responseData = respObj; 
 
      alert(respObj.email); 
 
     } 
 
     } 
 

 
    }); 
 

 
</script> 
 
</dom-module>

現在看到訪問該服務的元素:用戶details.html

<link rel="import" href="bower_components/polymer/polymer.html"> 
 
<link rel="import" href="x-custom.html"> 
 

 
<dom-module id="user-details"> 
 
    <style> 
 

 
    </style> 
 

 
<template> 
 
    
 
     <x-custom user="6f299d3cb8214c079433d7bb98a4a5ed" responseData={{responseData}} ></x-custom> 
 
      
 
      <h1>{{responseData.email}}</h1> 
 
      
 
</template> 
 
    <script> 
 
     Polymer({ 
 
       is: 'user-details' 
 
      }); 
 
    </script> 
 
</dom-module>

現在我調用用戶的細節元素在我的idex.html以下列方式

<user-details></user-details>

它成功地獲取的細節,但是,{{responseData.email}}不顯示user-details.html頁面中的電子郵件字符串。

如果我嘗試在x-custom.html頁面中獲取相同的值,我可以看到responseData.email值。 (請參閱x-custom.html中的hresponse函數中的警報)

請幫助我,並讓我知道如果我在某處失蹤。

+0

檢查這個數據綁定教程,也許你需要創建一個自定義元素來傳遞屬性中的數據 - https://www.youtube.com/watch?v=9rXJ5lJ5_TA – Tasos

+0

謝謝,但這是一個聚合物教程0.5。我想它不會有太大的幫助。 – RosAng

回答

2

注意我沒有采取既您的元素和測試這一點,但我的猜測是,你的問題是在你的<user-details>行,你這樣做:

<x-custom user="6f299d3cb8214c079433d7bb98a4a5ed" responseData={{responseData}} ></x-custom> 

除非這是一個錯字,那肯定是因爲你的屬性是駝峯不結合responseData。你需要做的:

<x-custom user="6f299d3cb8214c079433d7bb98a4a5ed" response-data={{responseData}} ></x-custom> 

您可能還需要做出responseData<x-custom>notify: true的屬性;我總是忘記。

+0

它的工作!問題與駝峯案例變量 – RosAng

+0

酷,你應該接受答案。 – mbunit

0

如果您試圖通過從其他自定義元素擴展來獲取數據,那麼Polymer 1.0目前不支持擴展自定義元素。 你可以找到這個在這個環節中的文檔顯示: https://www.polymer-project.org/1.0/docs/devguide/registering-elements.html#type-extension

+0

我想我不能在這裏澄清我的問題: 我不是想要擴展元素。我試圖創建一個服務元素,我將傳入一個輸入到json url,我想在另一個頁面中顯示其響應,而不是定義服務元素的頁面。 例如: <服務元件用戶= 「用戶ID」 responseData = {{responseData}}> 我怎樣才能在另一頁中使用的應答數據?我知道這是可能的與聚合物0.5 – RosAng