【发布时间】:2017-12-04 19:01:59
【问题描述】:
我目前有一个包含多个输入的表单。这些输入用于填充查询参数。在此路由的控制器上,Submit 操作注册查询参数输入并使用 transitionToRoute 加载嵌套路由,显示查询返回的信息。
这里是控制器的相关部分:
import Controller from '@ember/controller';
export default Controller.extend({
queryParams: ['dateFrom', 'dateTo', 'unitNumber', 'customerName'],
dateFrom: null,
dateTo: null,
unitNumber: null,
customerName: null,
actions: {
submitQuery() {
switch (module) {
case 'Option 1 List':
this.transitionToRoute('reports.option1', {
queryParams: {
dateFrom: this.get('dateFrom'),
dateTo: this.get('dateTo'),
unitNumber: this.get('unitNumber'),
customerName: this.get('customerName'),
},
})
break;
}
这是嵌套的路由:
import Route from '@ember/routing/route';
export default Route.extend({
queryParams: {
dateFrom: { as: 'meddateFrom',
refreshModel:true},
dateTo: { as: 'meddateTo', refreshModel:true},
unitNumber: { as: 'medunitNumber', refreshModel:true},
customerName: { as: 'medcustomerName', refreshModel:true},
},
model(params) {
return this.get('store').query('option1api', params)
},
});
我必须在这里做一些非常错误的事情,因为这会产生一些可怕的行为。我最终得到双倍的 URL 字符串中的查询参数。我最终也会遇到错误的参数更新行为,这会影响我在输入更改时重新运行查询的能力。
如果我没有在嵌套路由中包含 queryParams 对象 查询不会触发,也不会产生任何结果。
如果我不对我收到的嵌套路由中的 queryParams 起别名 错误告诉我我不能有重复的键值 多个控制器。
我尝试使用 paramsFor 而不是上面的 queryParams 并且可以 不产生结果。
我也无法再次按下提交按钮来启动新的查询。我认为这是因为我正在尝试转换到已加载的路线。
我考虑将 queryParams 从控制器移动到父路由 (reports.js),但据我了解,我需要控制器在第一个实例中设置 queryParams。
This question 似乎非常相似,但遗憾的是没有太多可用的答案。
谁能发现我的大错误或指出我正确的方向? EmberJS 指南中提供的文档对我目前的理解没有帮助。
【问题讨论】:
标签: javascript ember.js