我目前正在使用优秀的ember-power-select插件作为ember-bootstrap form的一部分。
我在表单上有多个下拉项,我试图将它们的处理方式统一到一个函数中,该函数可以用作power-select调用中的onChange
操作:
{{#form.element
controlType="power-select"
label="Destination"
value=destinationSelection
options=destinationOptions
as |el|}}
{{#el.control
onChange=(action "setDropDown")
searchField="name"
as |item|}}
{{item.name}}
{{/el.control}}
{{/form.element}}
字符串
我的处理函数将根据下拉列表的选择简单地设置一些值:
actions: {
setDropDown(selected, string) {
handleDropDown(selected, dropdown, this)
}
}
function handleDropDown(selected, dropdown, controller) {
let selection = `${dropdown}Selection`
let modelid = `model.${dropdown}_id`
set(controller, selection, selected)
set(controller, modelid, selected.id)
}
型
为了让它工作,我真的需要能够从组件调用的onChange
部分向setDropDown
操作传递一个字符串,否则我没有办法告诉处理程序函数它应该设置哪些特定的字段,而不需要为每个下拉列表创建一个操作。
但是,当我尝试传入多个参数时,如
onChange=(action "setDropDown" "destination")
型
或者是
onChange=(action "setDropDown" selected "destination")
型
我失去了onChange
操作的基本功能,将所选项作为它的第一个参数。
我浏览了文档,没有找到库作者向onChange
动作传递多个参数的任何示例,我想知道是否可以在不破坏库功能的情况下实现。
3条答案
按热度按时间qco9c6ql1#
您可以使用专门的高阶helper函数为
ember-power-select
创建一个操作,该操作最终将使用额外的参数调用您的操作。考虑这个助手handle-dropdown
字符串
因此,我们在这里所做的是创建将由
ember-power-select
调用的函数。在这个函数中,我们首先使用prop
调用原始操作,然后使用ember-power-select
调用onchange
函数的每个参数。在您的模板中,当将您的操作传递给
power-select
时,调用此帮助器型
然后你的动作会是
型
这最终将调用
dropdownChanged('foo', /* the selected value */)
pengsaosao2#
Ember Bootstrap's Power Select integration为类似的用例提供了一个很好的API。让我给予个例子。
让我们以国家选择器为例。我们有一个国家列表,这些国家由一个对象列表表示,这些对象的两个字母的国家代码(由ISO 3166-1定义为
id
属性)和名称为name
。所选国家/地区应在POJO模型上以国家/地区代码表示。字符串
现在我们可以像预期的那样使用Ember Bootstrap Power Select:
型
免责声明:我自己还没有测试过这些代码,所以可能会有错别字,但我希望你能明白。
zrfyljdw3#
您可以像这样在模板中添加第二个参数。所选选项将自动发送到功能。
字符串
然后创建你的函数来处理点击,你需要定义2个参数。您在模板中定义的参数将始终首先出现,因此它应该是您的第一个参数。
型