Полимерные параметры элемента ajax-элемента с привязкой данных разбивают параметр на отдельные символы

У меня проблема с элементом Iron-ajax Polymers. Когда вы вызываете его так:

 <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="...

При использовании обычного параметра String as он работает правильно, поэтому я думаю, что кавычки верны.

Элемент script элемента, который использует 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>

С установкой параметра в режиме готовности:

<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>

Ответы

Ответ 1

Похоже, это еще одно ограничение динамических атрибутов. Таким образом, обычным резервом для таких случаев являются функции getter:

 <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>

Ответ 2

Свойство params - это Object, и похоже, что синтаксический анализ из атрибута html (который является String) происходит только при присоединении.

IMHO самым простым решением является установка его перед генерированием запроса. Но установите объект, а не строку. Он сгенерирует один элемент для набора параметров GET для элемента params Object, String - это список символов, поэтому один параметр GET для каждого символа...

this.$.myAjaxElement.set( 'params', {"access_token": this.access_token });
this.$.myAjaxElement.generateRequest();