Polymer 1.0自动结合模板与铁-ajax

时间:2015-12-05 20:15:18

标签: ajax data-binding polymer-1.0

我正在尝试通过iron-ajax使用以下索引在我的index.html中请求服务:

<body class="fullbleed">
    <template is="dom-bind" id="mainTemplate">
        <paper-material class="todo" elevation="1">
            <span>Mohammed</span>
        </paper-material>
        <br/>
        <iron-ajax id="requestGeoname" auto url="http://api.geonames.org/findNearbyPlaceNameJSON" params='{{input}}' handle-as="json" last-response="{{data}}"></iron-ajax>
        <span>{{data.geonames.0.countryName}}</span>
        <br/>
        <span>{{data.geonames.0.name}}</span>
    </template>
    <p id="geolocation">Finding geolocation...</p>
</body>

在我的JS代码中,我想阅读{{data}}但不能这样做。我尝试使用以下方法:

<script type="text/javascript" charset="utf-8">
...
console.log(document.querySelector('#requestGeoname').data);
...
</script>

当我记录{{data}}时,代码给我未定义。

2 个答案:

答案 0 :(得分:1)

这应该有效:

<script type="text/javascript" charset="utf-8">
...
var template = Polymer.dom(this).querySelector('template[is=dom-bind]');
console.log(template.data);
...
</script>

正如Dogs所指出的,data属性不属于requestGeoname - 元素,它属于与dom-bind绑定的“模板”项。 Dogs解决方案也应该有效,但是如果你在应用程序中使用其他变量,这可能是更好的解决方案,因为它们现在可以通过template - 对象访问。例如:

...
template.myOthervariable = "derpherp";
...

答案 1 :(得分:1)

您必须等到请求完成。最好使用活动<script> document.getElementById('requestGeoname').addEventListener('response', function(event){ console.log(event.detail.response) }); </script> (更多信息:https://elements.polymer-project.org/elements/iron-ajax#response)。

<script>
var mainTemplate = document.getElementById('mainTemplate');
mainTemplate.onPlacesResponse = function(event){
    console.log(event.detail.response);
};
</script>

<iron-ajax … on-response="onPlacesResponse"

或声明地说:

MainModel.getNato is not a function