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

标签 javascript ember.js url-encoding

我在我的最新项目中使用版本 1.7.0-beta.1 的 Ember.js。我用 query params使列表在硬刷新后仍然存在的功能(例如,重新加载后,列表中的选定项目仍处于选中状态)。

我有一个负责管理的 Controller :

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 中有没有办法将查询参数字符串解码为更易读的格式?也许我可以在某处使用 decodeURIComponent() 函数?

期望的输出:

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

最佳答案

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

在 Controller 中你将拥有:

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

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

Take a look at this working example on jsbin.com

关于javascript - Ember.js 中查询参数的 URL 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24652975/

相关文章:

javascript - 如何在自定义 jQuery 函数中制作数组数据?

javascript - phantomjs 中的代理

javascript - Chrome 中使用 javascript 的语音转文本无法识别任何内容

integration-testing - 使用 jasmine 测试 ember.js 应用程序

javascript - 如何定义嵌套路由+ ember不渲染嵌套路由的模板

java - 如何在 Java 中进行 URL 解码?

javascript - 连接 2 个输入值并将结果绑定(bind)到输入

javascript - 两个函数的区别

javascript - 如何在 express 中处理非 UTF-8 编码的 url

java - 如何扩展 URL 类以支持 java (android) 中的其他协议(protocol)?