Ember JS - 通过查询参数将 select 框选项添加到 URL 字符串
Ember JS - Add select box option to URL string via Query Param
我的表单中有一个 Select 框,我希望能够使用 selection 作为查询参数,以便我可以根据其 [=30] 刷新模型=]离子。 Select 框来自 this ember add-on.
{{#select-box/native value=sb name=module on-select=(action 'selected') class="form-control" as |sb| }}
{{sb.option value='Select a Module:'}} {{sb.option value='Option1'}} {{sb.option value="Option2" }} {{sb.option value="Option3" }} {{sb.option value="option4" }}
{{/select-box/native}}
'selected' 操作只是将选项添加到变量,以便我稍后可以在 switch 语句中使用它:
selected(x) {
module = x
},
我想在我的 URL 字符串中包含 selection(或 selection 的表示),但我不知道如何做。我在 URL 字符串中构建了其他输入,但其中 none 是 select 框。
我在路线的 QueryParams 中有一个 'module' 项目,但它没有做任何事情,我怀疑我必须在 'selected' 操作中做一些事情,但我没有当然可以。
我没有使用过你提到的附加组件,但这里是你如何使用普通 <select>
来做到这一点,所以只需弥合普通 <select>
和附加组件之间的差距您使用的是确保下面示例中的 status
变量根据您在 select 框中的 select 进行更改 - Ember 将完成其余的工作。
如果您想根据下拉列表中 select 的状态值过滤用户列表,这里有一个配置:
// app/models/user.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
status: DS.attr('string')
});
// app/templates/users.hbs
<select onchange={{action (mut status) value="target.value"}}>
<option value="" selected={{eq status ''}}>- All users -</option>
<option value="active" selected={{eq status 'active'}}>Active</option>
<option value="inactive" selected={{eq status 'inactive'}}>Inactive</option>
</select>
<ul>
{{#each model as |user|}}
<li>{{user.name}}, {{user.status}}</li>
{{/each}}
</ul>
// app/controllers/users.js
import Controller from '@ember/controller';
export default Controller.extend({
queryParams: ['status'],
status: ''
});
// app/routes/users.js
import Route from '@ember/routing/route';
export default Route.extend({
queryParams: {
status: {
refreshModel: true
}
},
model(params) {
var options = {};
if (params.status) {
options.status = params.status;
}
return this.get('store').query('user', options);
}
});
它是如何工作的?
在控制器中,您定义了一个 属性 status
,您还指示它是一个查询参数(在 URL 中)。然后在路由中,您还将 status
定义为查询参数 ,它会刷新模型 。在 model()
挂钩中,您提取参数并将其用于 Ember 数据存储的 query()
,以便在每次更改状态值时获取模型。您的路由 URL 将附加 ?status=...
,并且您的服务器将收到类似于 example.com/api/users?status=...
的请求。当然,你可以在 model()
钩子中配置 options
不同的格式来为服务器格式化请求 URL,但为了简单起见,我保持这样。
唯一可能令人困惑的是模板文件。除了 {{eq status '...'}}
语法,它是 truth helper that simply determines whether the option is selected, the rest of the selecting simply aims to change the status
variable (explained in depth here).
我的表单中有一个 Select 框,我希望能够使用 selection 作为查询参数,以便我可以根据其 [=30] 刷新模型=]离子。 Select 框来自 this ember add-on.
{{#select-box/native value=sb name=module on-select=(action 'selected') class="form-control" as |sb| }}
{{sb.option value='Select a Module:'}} {{sb.option value='Option1'}} {{sb.option value="Option2" }} {{sb.option value="Option3" }} {{sb.option value="option4" }}
{{/select-box/native}}
'selected' 操作只是将选项添加到变量,以便我稍后可以在 switch 语句中使用它:
selected(x) {
module = x
},
我想在我的 URL 字符串中包含 selection(或 selection 的表示),但我不知道如何做。我在 URL 字符串中构建了其他输入,但其中 none 是 select 框。
我在路线的 QueryParams 中有一个 'module' 项目,但它没有做任何事情,我怀疑我必须在 'selected' 操作中做一些事情,但我没有当然可以。
我没有使用过你提到的附加组件,但这里是你如何使用普通 <select>
来做到这一点,所以只需弥合普通 <select>
和附加组件之间的差距您使用的是确保下面示例中的 status
变量根据您在 select 框中的 select 进行更改 - Ember 将完成其余的工作。
如果您想根据下拉列表中 select 的状态值过滤用户列表,这里有一个配置:
// app/models/user.js
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
status: DS.attr('string')
});
// app/templates/users.hbs
<select onchange={{action (mut status) value="target.value"}}>
<option value="" selected={{eq status ''}}>- All users -</option>
<option value="active" selected={{eq status 'active'}}>Active</option>
<option value="inactive" selected={{eq status 'inactive'}}>Inactive</option>
</select>
<ul>
{{#each model as |user|}}
<li>{{user.name}}, {{user.status}}</li>
{{/each}}
</ul>
// app/controllers/users.js
import Controller from '@ember/controller';
export default Controller.extend({
queryParams: ['status'],
status: ''
});
// app/routes/users.js
import Route from '@ember/routing/route';
export default Route.extend({
queryParams: {
status: {
refreshModel: true
}
},
model(params) {
var options = {};
if (params.status) {
options.status = params.status;
}
return this.get('store').query('user', options);
}
});
它是如何工作的?
在控制器中,您定义了一个 属性 status
,您还指示它是一个查询参数(在 URL 中)。然后在路由中,您还将 status
定义为查询参数 ,它会刷新模型 。在 model()
挂钩中,您提取参数并将其用于 Ember 数据存储的 query()
,以便在每次更改状态值时获取模型。您的路由 URL 将附加 ?status=...
,并且您的服务器将收到类似于 example.com/api/users?status=...
的请求。当然,你可以在 model()
钩子中配置 options
不同的格式来为服务器格式化请求 URL,但为了简单起见,我保持这样。
唯一可能令人困惑的是模板文件。除了 {{eq status '...'}}
语法,它是 truth helper that simply determines whether the option is selected, the rest of the selecting simply aims to change the status
variable (explained in depth here).