Ajax 从Polymer 1.0中的子元素(或深子元素)访问根基API URL
我在Polymer 1.0环境中创建了许多元素。有些元素是基于我使用iron ajax从数据库服务器获得的数据的列表。目前,我正在使用我的根应用程序将API URL作为元素属性传递给需要它的每个元素(或子元素),以便它可以进行调用并显示结果Ajax 从Polymer 1.0中的子元素(或深子元素)访问根基API URL,ajax,polymer-1.0,Ajax,Polymer 1.0,我在Polymer 1.0环境中创建了许多元素。有些元素是基于我使用iron ajax从数据库服务器获得的数据的列表。目前,我正在使用我的根应用程序将API URL作为元素属性传递给需要它的每个元素(或子元素),以便它可以进行调用并显示结果 不过,这种做法让人感觉有些不对劲。我应该将AJAX URL从根元素传递到需要它的子元素,还是子元素有办法知道全局设置的应用程序API URL是什么?幸运的是,我也遇到了同样的问题 其中有一个元素:) 因此,我创建了一个自定义元素来包装应用程序中的所有iron
不过,这种做法让人感觉有些不对劲。我应该将AJAX URL从根元素传递到需要它的子元素,还是子元素有办法知道全局设置的应用程序API URL是什么?幸运的是,我也遇到了同样的问题 其中有一个元素:) 因此,我创建了一个自定义元素来包装应用程序中的所有
ironajax
元素,称之为myappapi
这个myappapi
元素负责更新嵌套的ironajax
url属性
<dom-module id="my-app-api">
<style>
:host {
display: none;
}
</style>
<template>
<content select="iron-ajax"></content>
</template>
</dom-module>
<script>
(function() {
Polymer({
is: 'my-app-api',
properties: {
baseUrl: {
type: String,
value: 'http://localhost:9000'
}
},
attached: function() {
this.updateUrlsAndSign();
},
updateUrlsAndSign: function() {
var ajaxElements = Polymer.dom(this).querySelectorAll('iron-ajax');
var ajaxElementsArray = [].slice.call(ajaxElements);
ajaxElementsArray.forEach(function(ajax) {
var urlAttr = ajax.getAttribute('url');
if ( !urlAttr ) { return; }
ajax.url = this.baseUrl + urlAttr.replace(window.location.origin, '');
ajax.headers = ajax.headers || {};
ajax.headers['Content-Type'] = 'application/json';
...
}.bind(this));
}
});
})();
</script>
:主持人{
显示:无;
}
(功能(){
聚合物({
是:“我的应用程序api”,
特性:{
基本URL:{
类型:字符串,
值:'http://localhost:9000'
}
},
附:函数(){
this.updateUrlsAndSign();
},
updateUrlsAndSign:function(){
var ajaxElements=Polymer.dom(this.queryselectoral('iron-ajax');
var ajaxementsarray=[].slice.call(ajaxements);
forEach(函数(ajax){
var urlAttr=ajax.getAttribute('url');
如果(!urlatr){return;}
ajax.url=this.baseUrl+urlatr.replace(window.location.origin“”);
ajax.headers=ajax.headers | |{};
headers['Content-Type']='application/json';
...
}.约束(这个);
}
});
})();
示例用法
<my-app-api>
<iron-ajax
url="/api/videos/"
params="{{requestParams}}"
handle-as="json"
on-response="handleResponse"></iron-ajax>
</my-app-api>
我没有在ironajax
元素上设置auto
属性来测试它
在我的例子中,这不是一个问题,所以上面的代码对我来说很好
希望这将帮助您实现更好的解决方案。我做了类似的事情(在API元素中包装iron),但我不喜欢在元素中硬编码我的基本API URL。如果元素与使用不同端口的人共享,该怎么办?如果我将端口作为一个参数传递给我的包装器,那么我将端口Parma传递给每个元素和子包装器-这似乎也不正确…还有一个问题,@Mohammad:如何处理请求头的会话令牌和用户ID更新?您是否每次都将它们传递到iron ajax元素中?@Sean当然,这就是
updateUrlsAndSign()
函数的其余部分