【问题标题】:Polymer iron-ajax element params with databinding is splitting the parameter into single chars具有数据绑定的聚合物 iron-ajax 元素参数将参数拆分为单个字符
【发布时间】:2015-12-08 19:44:03
【问题描述】:

我对 Polymers iron-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 的 Element 脚本部分:

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

【问题讨论】:

  • 这里有同样的问题。不幸的是,它也弄乱了我的查询,但我认为这应该在未来的版本中修复。
  • 我在使用 Iron ajax 2.0 时遇到了同样的问题!我想知道什么给了。

标签: polymer polymer-1.0


【解决方案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 属性是一个对象,看起来从 html 属性(即字符串)的解析只发生在附加时。

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多