javascript - EmberJS : Object as Query Param to Refresh Model

标签 javascript ember.js

我遵循了查询参数指南 ( 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/

相关文章:

javascript - 如何修复 javascript 中的这个错误

javascript - 仅在 Highcharts 中每 x 个步骤显示标签

JavaScript/原型(prototype).js : Delete property from JSON object

javascript - Ember Array 观察器不工作

javascript - Ember.js 组件 didRender 变量范围

ember.js - ember-data 中 Rails 风格的多态模型

javascript - 导航栏 : position Absolute and Sticky

javascript - FileReader onloadend 中循环变量的值

ember.js - Ember 数据 : Manually send model to updated state

javascript - "Route was not found"Ember.js