我遵循了查询参数指南 ( http://guides.emberjs.com/v1.11.0/routing/query-params/ ),并且效果很好。具体来说,刷新模型正是我想要的。
我正在将过滤器移至 json-api 规范,过滤发生在 filter
对象中。所以而不是:
http://localhost:3000/accounts?id=1
服务器响应:
http://localhost:3000/accounts?filter[id]=1
我试图让查询参数根据对象刷新模型,但它似乎没有更新。
// app/controllers/accounts/index.js
import Ember from 'ember';
export default Ember.Controller.extend({
queryParams: ['filter', 'sort'],
filter: {},
sort: '-id'
});
// app/routes/accounts/index.js
import Ember from 'ember';
export default Ember.Route.extend({
queryParams: {
filter: { refreshModel: true },
sort: { refreshModel: true }
},
model: function(params) {
return this.store.find('account', params);
},
});
// template
<th>{{input type="text" placeholder="ID" value=filter.id}}</th>
是否可以让查询参数与对象一起使用?
最佳答案
此答案来自 Ember 版本 1.13.0-beta.1+canary
。
简短的回答:否。查询参数不适用于对象。
长答案:
截至目前,Router
中名为 _serializeQueryParams
的私有(private)函数序列化 queryParams
。
_serializeQueryParams(targetRouteName, queryParams) {
var groupedByUrlKey = {};
forEachQueryParam(this, targetRouteName, queryParams, function(key, value, qp) {
var urlKey = qp.urlKey;
if (!groupedByUrlKey[urlKey]) {
groupedByUrlKey[urlKey] = [];
}
groupedByUrlKey[urlKey].push({
qp: qp,
value: value
});
delete queryParams[key];
});
for (var key in groupedByUrlKey) {
var qps = groupedByUrlKey[key];
var qp = qps[0].qp;
queryParams[qp.urlKey] = qp.route.serializeQueryParam(qps[0].value, qp.urlKey, qp.type);
}
},
qp.urlKey
在您的示例中将评估为 'filter'
,并且对象将被序列化为 'object [Object]'
。即使您可以在路由中覆盖 serializeQueryParam
方法,但这也无济于事,因为 queryParam
键仍然是 'filter'
,并且你需要它是 'filter%5Bid%5D'
基于 this comment in the Ember Discussion Forum ,听起来对象查询参数不太可能,您最好只展平和展平过滤字段。
关于javascript - EmberJS : Object as Query Param to Refresh Model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29929514/