背景:用户可以根据标签过滤列表,每个标签都是Ember数据模型。选定的过滤标签应通过查询参数存储在URL中。我还想在界面中显示所选标签。
最好的方法是什么?
我非常确定我只想存储ID,但如果我这样做,我必须维护一个单独的变量/计算属性,其中我存储来自查询参数的ID的实际记录。这种重复似乎对我不利。
除了这个问题,我不知道我是应该使用数组查询参数还是构建逗号分隔的ID字符串。如果我做前者,我最终会得到像?tags=%5B"3"%5D
这样丑陋的网址。但是做后者意味着要做更多的工作。
那么你解决这类问题的方法是什么?我希望我错过了一些没有明显缺点的东西:)
答案 0 :(得分:1)
容易!
~!*()_-.
*
。将它用作分隔符。然后你有一个很好的可读查询:
?tags=foo*bar*baz&search=quux
要实现自定义查询参数序列化/反序列化,请执行以下操作:
Ember.Route.reopen({
serializeQueryParam: function(value, urlKey, defaultValueType) {
if (defaultValueType === 'array') {
return `${value.join('*')}`;
}
return this._super(...arguments);
},
deserializeQueryParam: function(value, urlKey, defaultValueType) {
if (defaultValueType === 'array') {
return value.split('*');
}
return this._super(...arguments);
}
});
如果您必须在查询参数中使用数字标记ID(例如,您的标记名称不唯一),那么您需要进行更多自定义:app,{{3} }。