Polymer 1.0数据绑定和访问ajax响应对象

时间:2015-07-19 12:57:28

标签: javascript html json polymer-1.0

我是聚合物的新手,我正在尝试创建一个接收请求并发回响应的自定义服务。但是,即使我可以看到在服务页面中设置了对象,我也面临访问响应对象的问题。

请参阅服务代码: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',
	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>
&#13;
&#13;
&#13;

现在查看访问该服务的元素:user-details.html

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

现在我按照以下方式调用我的idex.html中的user-details元素

&#13;
&#13;
<user-details></user-details>
&#13;
&#13;
&#13;

它成功提取了详细信息,但{{responseData.email}}未在user-details.html页面中显示该电子邮件字符串。

如果我尝试在x-custom.html页面中获取相同的值,我可以看到responseData.email值。 (请参阅x-custom.html内hresponse函数中的警报)

请帮助我,如果我在某处遗失,请告诉我。

2 个答案:

答案 0 :(得分:2)

注意我还没有采用您的元素并对其进行测试,但我猜您的问题出在<user-details>行中:

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

除非这是一个拼写错误,否则它肯定不会绑定到responseData,因为你的属性是在camelCase中。你需要这样做:

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

您可能还需要responseData <x-custom> notify: true属性LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) { HWND hwnd; WNDCLASSEX wincl; // register WindowProcedure() as message callback function wincl.lpfnWndProc = WindowProcedure; // assign other properties... if (!RegisterClassEx (&wincl)) return 0; // create main window hwnd = CreateWindowEx ( ... ); // infinite message loop while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } return 0; } ;我总是忘记。

答案 1 :(得分:0)

如果您尝试通过从其他custom元素扩展来获取数据,则Polymer 1.0当前不支持扩展自定义元素。 您可以在此链接的文档中找到此信息: https://www.polymer-project.org/1.0/docs/devguide/registering-elements.html#type-extension