0

我有一个 Ember v2.14 应用程序,我试图在其中查询外部 API。API 采用键中带有点(“.”)的查询参数,如下所示:

http://example.com/records?query.code=abc123&code.system=whatevs

我尝试在我的控制器中设置 queryParams,如下所示:

// app/controllers/records.js

import Ember from 'ember';

export default Ember.Controller.extend({
  queryParams: ['query.code', 'code.system'],
  query.code: null,
  code.system: null
})

Ember 构建失败,在我的 queryParams 声明之后的行中的第一个点字符处出现“意外令牌”。

我尝试使用百分比编码来替换点,如果我在浏览器中输入它,这会很好:

http://example.com/records?query%2Ecode=abc123&code%2Esystem=whatevs

但是,如果我在控制器中尝试对查询参数进行相同的百分比编码,Ember 构建将再次失败。

// app/controllers/records.js

import Ember from 'ember';

export default Ember.Controller.extend({
  queryParams: ['query%2Ecode', 'code%2Esystem'],
  query%2Ecode: null,
  code%2Esystem: null
})

有人知道我应该做不同的事情吗?

4

1 回答 1

0

嗯,你把东西混在这里!是关于您的 ember 应用程序queryParams的查询参数。如果您想调用外部 API,请使用、或,具体取决于您的具体用例。$.ajaxember-dataember-ajaxember-fetch

查询参数适用于您的路线。因此,您可以使用 , 之类的 url http://my-ember-app.example.com/foo?bar=bazbaz例如,您可以在控制器中使用的过滤器值。

然而,真正的问题是如何生成一个带有点的键的简单 JavaScript 对象。

答案很简单:

var x = {};
x['foo.bar'] = 'bar';

所以你可以做这样的事情:

const params = {};
params.queryParams = ['query.code', 'code.system'];
params['query.code'] = null;
params['query.system'] = null;
export default Ember.Controller.extend(params)

然而,在较新版本的 javascript 中,我们有一个快捷方式:

var x = {
  ['foo.bar']: 'baz'
}

这意味着您可以这样做:

const params = {};
params.queryParams = ['query.code', 'code.system'];
params['query.code'] = null;
params['query.system'] = null;
export default Ember.Controller.extend({
  queryParams: ['query.code', 'code.system'],
  ['query.code']: null,
  ['code.system']: null
})

但是,这是用于 ember 查询参数,而不是用于调用外部 API!

于 2017-08-27T16:21:32.937 回答