Ember.js中查询参数的Url编码

Url encoding for query params in Ember.js

本文关键字:Url 编码 参数 查询 js Ember      更新时间:2023-09-26

我在我的最新项目中使用Ember.js,版本1.7.0-beta.1。我使用查询参数功能使列表在硬刷新后存活(例如,在重新加载后,列表中所选的项仍然被选中)。

我有一个控制器来管理它:

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编码的:

铬,即:

路径/354 ?文件= % 5 b 2 c"6455"6513"% % 2 c % 2 c"6507"6509"% 2 c % 2 c"6504"6505"% 2 c"6511"% 5 d

FF (自动设置括号):

路径/354 ?文件= " 6513 " % 2 c % 2 c"6509"6455"% 2 c % 2 c"6505"6507"% 2 c % 2 c"6511"6504")

在Ember中是否有一种方法可以将query-param-string解码为更可读的格式?也许我可以在什么地方用decodeURIComponent()函数?

期望输出:

路径/354 ?文件=("6513"、"6455"、"6509"、"6507"、"6505"、"6504"、"6511")

我有一个非常类似的问题,并通过覆盖路由中的serializeQueryParamdeserializeQueryParam使其工作

在控制器中,你会有:

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

在route中:

  serializeQueryParam: function(value, urlKey, defaultValueType) {
    if (defaultValueType === 'array') {
      return value;
      // Original: return JSON.stringify(value);
    }
    return '' + value;
  }, 

:

  deserializeQueryParam: function(value, urlKey, 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;
  }, 

url将变成类似于:

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

在服务器端将是一个真正的数组。

看一下jsbin.com上的工作示例