通过 iron-ajax 初始化对象数组(link 响应调用者的元素)
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 属性。
假设我有一个只有一个 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 属性。