如何通过javascript访问core-ajax响应数据?

时间:2014-09-25 13:48:51

标签: javascript polymer

例如,如果我在index.html文件中的自动绑定模板中有以下代码:

的index.html

<template is="auto-binding">
    <core-ajax id="ds" auto url="url/to/data.json" response="{{data}}"></core-ajax>
    <my-items items="{{data}}"></my-items>
</template>

app.js

(function(document) {
  'use strict';

    document.addEventListener('polymer-ready', function() {
        var responseData = ????
    });
})(wrap(document));

1 个答案:

答案 0 :(得分:2)

通常我们使用与core-ajax的数据绑定,但如果您需要使用JS来获取它,您可以从core-response触发的core-ajax事件中获取响应,或者您可以查看在response标记本身的core-ajax属性中。 jsbin example

<core-ajax auto url="http://date.jsontest.com"></core-ajax>

<script>
  document.addEventListener('polymer-ready', function() {
    var ajax = document.querySelector('core-ajax');
    ajax.addEventListener('core-response', function(e) {
      console.log(e.detail.response);
      // or
      console.log(e.target.response);
      // or
      console.log(ajax.response);
    });
  });
</script>

编辑:OP希望获得自动绑定模板中的core-ajax元素

template-bound模板将其内容标记到页面时,您应该监听auto-binding模板触发的事件。然后,querySelector可以core-ajaxjsbin example

<template is="auto-binding">
  <core-ajax auto url="http://date.jsontest.com"></core-ajax>
</template>

<script>
  var tmpl = document.querySelector('template');
  tmpl.addEventListener('template-bound', function() {
    var ajax = document.querySelector('core-ajax');
    ajax.addEventListener('core-response', function(e) {
      console.log(e.detail.response);
      // or
      console.log(e.target.response);
      // or
      console.log(ajax.response);
    });
  });
</script>

编辑:展示更好的方法

由于原始海报专门询问是否使用JavaScript获取响应,因此我给出了完全JS方法。你可以使用绑定来清理它。 jsbin example

<template is="auto-binding">
  <core-ajax auto
             response="{{data}}"
             on-core-response="{{ajaxHandler}}"
             url="http://date.jsontest.com"
             handleAs="json"></core-ajax>
  <h1>{{data.date}}: {{data.time}}</h1>
</template>

<script>
  addEventListener('template-bound', function(e) {
    // do something else with response
    e.target.ajaxHandler = function(event) {
      console.log(event.target.response);
    }
  });
</script>