Полимерный железо-ajax элемент params с привязкой данных расщепляет параметр на отдельные символы
у меня проблема с полимерами железо-ajax элемент. Называя это так:
<iron-ajax url="https://api.onedrive.com/v1.0/drive/root" params='{"access_token":"[[access_token]]"}'></iron-ajax>
он отправляет url-адрес, как это, разделяя всю строку params на несколько параметров:
https://api.onedrive.com/v1.0/drive/root?0="&1=a&2=c&3=c&4=e&5=s&6=s&7=_&8=t&9=o&10=k&11=e&12=n&13="...
при использовании обычной строки в качестве параметра она работает правильно, поэтому я думаю, что кавычки верны.
часть скрипта элемента, который использует iron-ajax:
<script>
Polymer({
is: 'onedrive-files',
properties: {
access_token: String
},
ready: function() {
},
});
</script>
и я вызываю элемент следующим образом:
<onedrive-files access_token="testtoken">
</onedrive-files>
тут у кого-нибудь есть идеи? Спасибо!
изменить: С функцией getter:
<dom-module id="onedrive-files">
<template>
<iron-ajax id="ajax" url="https://api.onedrive.com/v1.0/drive/root" last-response="{{data}}" params='{{_getParams()}}' auto></iron-ajax>
</template>
<script>
Polymer({
is: 'onedrive-files',
properties: {
access_token: String
},
_getParams: function()
{
return ('{"access_token":"' + this.access_token + '"}');
},
ready: function() {
this.$.ajax.generateRequest();
},
});
</script>
</dom-module>
С установкой параметра в функции Ready:
<dom-module id="onedrive-files">
<template>
<iron-ajax id="ajax" url="https://api.onedrive.com/v1.0/drive/root" last-response="{{data}}" auto></iron-ajax>
</template>
<script>
Polymer({
is: 'onedrive-files',
properties: {
access_token: String
},
ready: function() {
this.$.ajax.params = '{"access_token":"' + this.access_token + '"}';
},
});
</script>
</dom-module>
2 ответов
похоже, это еще одно ограничение динамических атрибутов. Таким образом, обычным резервом для таких случаев являются функции геттера:
<iron-ajax url="https://api.onedrive.com/v1.0/drive/root" params='{{_getParams(access_token)}}'></iron-ajax>
...
<script>
Polymer({
is: 'onedrive-files',
properties: {
access_token: String
},
_getParams:function(access_token) {
return {access_token:access_token};
}
});
</script>
свойство params является объектом, и похоже, что синтаксический анализ из атрибута html (который является строкой) происходит только на attached.
IMHO самое простое решение-установить его перед созданием запроса. Но установите объект, а не строку. Он будет генерировать один элемент GET param foreach объекта params, строка-это список символов, поэтому для каждого символа нужно получить param...
this.$.myAjaxElement.set( 'params', {"access_token": this.access_token });
this.$.myAjaxElement.generateRequest();