我在我的最新项目中使用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:
路径/ 354文件=%5B" 6513"%2C" 6455"%2C" 6509"%2C" 6507"%2C" 6505"%2C" 6504"%2C" 6511"%5D
FF(自动设置括号):
路径/ 354文件=" 6513"%2C" 6455"%2C" 6509"%2C" 6507"%2C" 6505& #34;%2C" 6504"%2C" 6511"]
Ember中有没有办法将query-param-string解码为更易读的格式?也许我可以在某处使用decodeURIComponent()
函数?
所需的输出:
?路径/ 354文件= [" 6513"" 6455"" 6509"" 6507"" 6505"" 6504"" 6511"]
答案 0 :(得分:10)
我遇到了一个非常类似的问题,并通过覆盖路线中的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, 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;
},
该网址将变为:
?files[]=1&files[]=2&files[]=3
这将是服务器端的真实阵列。