Polymer 1.0:有助于避免所有元素发出相同的 ajax 请求
Polymer 1.0: Help to avoid all elements making same ajax request
我的场景:我有多个元素看起来都像这样
<dom-module is="elm1">
<iron-ajax id="ajax"></iron-ajax>
</dom-module>
<script>
Polymer({
is: "elm1",
properties: {
token: {
type: String,
observer: "_tokenChanged"
}
},
_tokenChanged: function() {
this.$.ajax.url = "someUrl" + this.token;
this.$.ajax.generateRequest();
}
});
</script>
现在假设我在页面上说了其中的 10 个。
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
这是对需要发生的完全相同端点的 10 个单独调用。我怎样才能将它合并为一个请求,然后可以在元素之间共享?
我的问题是我有太多元素进行太多相同的 ajax 调用以获得完全相同的数据。这正在损害我们的表现...
首先,包括一个包含 AJAX 调用结果的 iron-meta
元素。在您的 tokenChanged
函数中,在触发 AJAX 请求之前检查 iron-meta
的内容。如果数据存在,则使用它,如果不存在,请检查第二个 iron-meta
元素以查看它是否包含 iron-ajax
Promise。如果是这样,该 Promise 将 return AJAX 请求的结果,如果不是,那么您可以触发您的 AJAX 请求并将结果 Promise 相应地存储在第二个 iron-meta
中。
请注意,两个 iron-meta
键都应包含 token
值,以避免与使用不同值的 elm1
实例发生冲突。
你可以尝试使用iron-ajax的自动参数。它只会在值更改时发出请求。所以在这个例子中,如果令牌没有改变,将只有一个请求。我喜欢 Zikes 对你的问题的回应,你可以在 _tokenResponse 方法中做到这一点。
<dom-module is="elm1">
<iron-ajax
auto
url={{url}}
on-response="_tokenResponse"></iron-ajax>
</dom-module>
<script>
Polymer({
is: "elm1",
properties: {
token: String,
url: {
type: String,
computed: '_url(token)'
}
},
_url: function(token){
return "someUrl" + token;
},
_tokenResponse: function(e, detail) {
//do something with the response
}
});
</script>
我的场景:我有多个元素看起来都像这样
<dom-module is="elm1">
<iron-ajax id="ajax"></iron-ajax>
</dom-module>
<script>
Polymer({
is: "elm1",
properties: {
token: {
type: String,
observer: "_tokenChanged"
}
},
_tokenChanged: function() {
this.$.ajax.url = "someUrl" + this.token;
this.$.ajax.generateRequest();
}
});
</script>
现在假设我在页面上说了其中的 10 个。
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
<elm1 token="123456"></elm1>
这是对需要发生的完全相同端点的 10 个单独调用。我怎样才能将它合并为一个请求,然后可以在元素之间共享?
我的问题是我有太多元素进行太多相同的 ajax 调用以获得完全相同的数据。这正在损害我们的表现...
首先,包括一个包含 AJAX 调用结果的 iron-meta
元素。在您的 tokenChanged
函数中,在触发 AJAX 请求之前检查 iron-meta
的内容。如果数据存在,则使用它,如果不存在,请检查第二个 iron-meta
元素以查看它是否包含 iron-ajax
Promise。如果是这样,该 Promise 将 return AJAX 请求的结果,如果不是,那么您可以触发您的 AJAX 请求并将结果 Promise 相应地存储在第二个 iron-meta
中。
请注意,两个 iron-meta
键都应包含 token
值,以避免与使用不同值的 elm1
实例发生冲突。
你可以尝试使用iron-ajax的自动参数。它只会在值更改时发出请求。所以在这个例子中,如果令牌没有改变,将只有一个请求。我喜欢 Zikes 对你的问题的回应,你可以在 _tokenResponse 方法中做到这一点。
<dom-module is="elm1">
<iron-ajax
auto
url={{url}}
on-response="_tokenResponse"></iron-ajax>
</dom-module>
<script>
Polymer({
is: "elm1",
properties: {
token: String,
url: {
type: String,
computed: '_url(token)'
}
},
_url: function(token){
return "someUrl" + token;
},
_tokenResponse: function(e, detail) {
//do something with the response
}
});
</script>