javascript – Ember.js中查询参数的URL编码

前端之家收集整理的这篇文章主要介绍了javascript – Ember.js中查询参数的URL编码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的最新项目中使用的是Ember.js,版本1.7.0-beta.1.我使用 query params功能使列表在硬刷新后仍然存在(例如,在重新加载之后,仍然选择列表中的所选项目).

我有一个控制器来管理:

export default Ember.ObjectController.extend({
    queryParams: [{selectedFiles: 'files'}],selectedFiles: Ember.A([]),//list of file ids

    ... //other props

    actions: {
    selectFile: function(file) {
        //set or remove the file id to the selectedFiles property
    }
});

它工作得很棒,但有一个条件:url是url编码的:

Chrome& IE:

path/354?files=%5B”6513″%2C”6455″%2C”6509″%2C”6507″%2C”6505″%2C”6504″%2C”6511″%5D

FF(自动设置括号):

path/354?files=”6513″%2C”6455″%2C”6509″%2C”6507″%2C”6505″%2C”6504″%2C”6511″]

在Ember中有一种方法可以将query-param-string解码为更易读的格式吗?也许我可以在某处使用decodeURIComponent()函数

所需的输出

path/354?files=[“6513″,”6455″,”6509″,”6507″,”6505″,”6504″,”6511”]

解决方法

我有一个非常类似的问题,并通过重写路由中的serializeQueryParam和deserializeQueryParam使其工作.

在控制器中你会有:

queryParams: ['files'],files: []

并在路线:

serializeQueryParam: function(value,urlKey,defaultValueType) {
    if (defaultValueType === 'array') {
      return value;

      // Original: return JSON.stringify(value);
    }
    return '' + value;
  },

和:

deserializeQueryParam: function(value,defaultValueType) {

    if (defaultValueType === 'array') {

      var arr = [];
      for (var i = 0; i < value.length; i++) {
        arr.push(parseInt(value[i],10));
      }      

      return arr;

      // Original: return Ember.A(JSON.parse(value));
    }

    if (defaultValueType === 'boolean') {
      return (value === 'true') ? true : false;
    } else if (defaultValueType === 'number') {
      return (Number(value)).valueOf();
    }
    return value;
  },

该网址将变为如下:

?files[]=1&files[]=2&files[]=3

那将是服务器端的真实阵列.

Take a look at this working example on jsbin.com

猜你在找的JavaScript相关文章