具有数据绑定的聚合物铁-ajax元素参数将参数分成单个字符

Sos*_*ian 14 polymer polymer-1.0

我有聚合物铁-ajax元素的问题.当这样称呼时:

 <iron-ajax url="https://api.onedrive.com/v1.0/drive/root" params='{"access_token":"[[access_token]]"}'></iron-ajax>
Run Code Online (Sandbox Code Playgroud)

它发送这样的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="...
Run Code Online (Sandbox Code Playgroud)

当使用普通的String作为参数时,它可以正常工作,所以我猜引号是正确的.

元素的脚本部分使用iron-ajax:

<script>

  Polymer({
  is: 'onedrive-files',
  properties: {
    access_token: String
  },

  ready: function() {
  },
});
</script>
Run Code Online (Sandbox Code Playgroud)

我正在调用这样的元素:

<onedrive-files access_token="testtoken">
</onedrive-files>
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法?谢谢!

编辑:使用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>
Run Code Online (Sandbox Code Playgroud)

将Param设置为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>
Run Code Online (Sandbox Code Playgroud)

Com*_*eak 8

这似乎是动态属性的另一个限制.因此,这种情况的通常后备是getter函数:

 <iron-ajax url="https://api.onedrive.com/v1.0/drive/root" params='{{_getParams(access_token)}}'></iron-ajax>
Run Code Online (Sandbox Code Playgroud)

...

<script>

  Polymer({
  is: 'onedrive-files',
  properties: {
    access_token: String
  },
  _getParams:function(access_token) {
       return {access_token:access_token};
  }
});
</script>
Run Code Online (Sandbox Code Playgroud)


小智 7

params属性是一个Object,它看起来像是从html属性(String)解析才发生在附加上.

恕我直言,最简单的解决方案是在生成请求之前设置它.但是设置一个Object,而不是String.它将生成params对象的一个​​GET参数foreach元素,String是一个字符列表,因此每个字符有一个GET参数...

this.$.myAjaxElement.set( 'params', {"access_token": this.access_token });
this.$.myAjaxElement.generateRequest();
Run Code Online (Sandbox Code Playgroud)