通过iron-ajax初始化对象数组(链接到caller's元素的响应)
Init array of objects by iron-ajax (link response to caller's element)
假设我有一个对象数组,它只有一个id:
[{id:'1'},{id:'2'},{id:'3'}]
我想使用iron-ajax:一个接一个地用来自某个服务的数据填充它们
<iron-ajax id="initObjectByIdService"
handle-as="json"
on-response="_handleResponse"></iron-ajax>
...
initObjects: function(){
for (var i =0; i < arr.lenght; i++){
this.$.initObjectByIdService.url = <some_url> + '/' + arr[i].id
this.$.initObjectByIdService.generateRequest();
}
},
_handleResponse: function(event){
// How I can link this response event with proper element of an array?
}
有用的是将调用者的元素索引传递给on-response
函数,类似于:
...
this.$.initObjectByIdService.onResponse = this._handleResponse(i);
...
但它看起来很奇怪和错误,而且不起作用…:(
ES6解决方案
您应该能够通过使用let这样的关键字来解决这个问题:
initObjects: function() {
// using let instead of var
for (let i =0; i < arr.lenght; i++){
this.$.initObjectByIdService.url = <some_url> + '/' + arr[i].id
var request = this.$.initObjectByIdService.generateRequest();
request.completes.then(function(response) {
// your i variable should be available in this block
});
}
},
另一种解决方案
不需要let关键字的解决方案可能如下所示:
initObjects: function() {
// using let instead of var
for (var i =0; i < arr.lenght; i++){
this.$.initObjectByIdService.url = <some_url> + '/' + arr[i].id
var request = this.$.initObjectByIdService.generateRequest();
request.completes.then(this._handleResponse(i));
}
},
_handleResponse: function(i) {
return function(response) {
// i variable should be normally visible in this scope
};
}
在这两种情况下,您还应该从iron-ajax组件中删除on-response属性。
相关文章:
- 通过iron-ajax初始化对象数组(链接到caller's元素的响应)
- 响应画布元素
- 为什么不是't html<对象>元素响应鼠标事件
- 如何在jquery ajax成功html响应中找到输入隐藏元素
- 按钮元素没有响应
- 单击按钮后的无响应元素
- 自动完成搜索无法正常工作,请不要迭代$中的所有元素.每个ul-li都会及时显示响应
- 原型js 如何使定期更新程序隐藏基于ajax响应的类元素
- Jquery-(ajax async:true)元素大小没有响应
- 为什么jquery元素在ipad上没有响应
- 页面元素停止响应
- 如何从html响应解析javascript数组(包含JSON对象作为元素)
- 循环遍历 AJAX 响应元素
- 多个元素响应移动Webkit和Hammer JS上的触摸事件
- 将元素添加到 Ajax 响应返回的表单中
- 如何使图像DOM元素响应
- 我怎么能强迫元素在一个固定的定位元素响应javascript的onclick事件在Android web浏览器
- 如何使用CSS @media查询使这个元素响应
- 基于部分元素响应解析JSON数据
- JS窗口宽度html5视频元素响应