javascript - 如何从外部打开和关闭 Ember Power Select
问题描述
我知道这个问题,但并不完整。我想从外部打开和关闭下拉菜单。
mousedown
单击我的包装器组件时,我可以调度一个事件,因此ember-power-select
触发器打开!但是,如果我再次单击它不会关闭。更准确地说,它会快速关闭并再次打开。
我的假设是组件正在侦听blur
事件以关闭,然后mousedown
再次到达并打开触发器。
有没有人设法让它工作?还是替代品??我很迷茫:)
谢谢您的帮助!
wrapper-component.js
didInsertElement() {
this._super(...arguments);
this.element.addEventListener('mousedown', (event) => {
event.stopPropagation();
const eventedElement = this.element.querySelector('.ember-power-select-trigger');
const mouseDownEvent = new MouseEvent('mousedown');
eventedElement.dispatchEvent(mouseDownEvent);
});
},
解决方案
根据文档,与触发器/组件交互的唯一方法是通过 ember-power-select 组件的子组件、块和操作中提供的只读 API。
由于您已经可以打开触发器,因此您可以在onchange
渲染 ember-power-select 的组件(或路由控制器)中定义的事件操作中缓存 API:
渲染组件的位置只需提供一个操作onopen
:
{{#ember-power-select
options=options
selected=selectedOption
onchange=(action "someAction")
onopen=(action "cacheAPI")
as |option|}}
{{option}}
{{/ember-power-select}}
在呈现它的组件或控制器中:
actions: {
cacheAPI(options) {
if (this.powerSelectAPI) return;
this.set('powerSelectAPI', options);
// if you just want the actions:
// this.set('powerSelectAPI', options.actions);
}
}
然后您可以通过 API 打开/关闭触发器:
this.get('powerSelectAPI').actions.close();
推荐阅读
- python-3.x - 如何在aiortc(python)中将答案设置为LocalDescription?
- python - 在.ebextension中使用相同代码重新部署弹性beantalk时出现python错误
- reactjs - 如何从 redux 工具包异步 thunk 的挂起状态修改另一个切片的状态
- java - Spring 应用程序生成 2 个 jars - 可执行文件并作为依赖项
- java - 如何将字符串集合传递给具有 (String...Strings) 签名的方法?
- r - 具有某一列的某些值并排除另一列的一个值的数据子集
- android - 如何保存可滚动 TabLayout 的滚动状态?
- elasticsearch - elasticsearch中的近似聚合结果
- swift - Swift Vapor:同时通过迁移和从结构中删除数据库字段
- javascript - 如何让函数 querySelectorAll 同时选择一个类和一个 src?