javascript - Ember.js - classNameBindings 正在删除从外部添加的类
问题描述
当 Ember 通过属性重新计算组件的类时classNameBindings
,它会覆盖从外部添加的任何类,例如由 jQuery 直接添加到元素的类。
重构以通过“Ember 方式”添加类classNameBindings
不是一种选择,因为我使用的是添加它们的外部 jQuery 插件,完美滚动条。
我想问题的发生是因为 Ember 不知道添加的类,只是忽略了它们。
对于这种情况,是否有一种干净的方法/解决方法?
我在这里提出了一个问题的最小工作示例 (如果有办法使用代码片段获得一个工作的 ember 示例,请告诉我并编辑)
解决方案
在 Ember 重新渲染您的组件后,您需要恢复从 Ember 外部操作的任何 DOM 状态。
import Ember from 'ember';
export default Ember.Component.extend({
classNames: ['component'],
classNameBindings: [
'flag:emberClassA:emberClassB'
],
flag: false,
didRender() {
Ember.run.scheduleOnce('afterRender', this, this.restoreJQueryClass);
},
restoreJQueryClass() {
if (this._savedClassState) {
this.$().addClass('jQueryClass', this._savedClassValue);
}
},
actions: {
toggleFlag () {
this.toggleProperty('flag');
},
toggleClassFromOutside() {
this.$().toggleClass('jQueryClass');
this.set('_savedClassState', this.$().hasClass('jQueryClass'));
}
}
});
通常,当今大多数 Ember 应用程序已经开始避免使用 jQuery 和其他执行 DOM 操作的 JavaScript 库,而是编写 Ember 组件以避免您遇到的一些困难。Ember 本身很快就会默认停止包含 jQuery。
这是更新的 Twiddle:https ://ember-twiddle.com/86ed63a495dbc010a3e7bfb18e2a839a?openFiles=components.x-example.js%2C
这个答案是 Ember 3.4 的最新答案。
推荐阅读
- php - 如何使用 API 密钥发出 curl 请求?
- java - Eclipse Scala 在 Mac OS 上启动时崩溃
- excel - 使用 Excel 添加基于 id 的总和
- vb.net - 如何将占位符放入我的用户名和密码文本框中,而 Visual Basic 将其作为没有值的文本框进行威胁?
- django - Django 和 celery:为 'celery' 程序设置 DJANGO_SETTINGS_MODULE 有什么需要,因为它已经在 manage.py 中设置了
- reactjs - 刷新页面时 Gatsby 链接状态丢失
- android - 使用 SVG。难道画质不会变?
- micronaut - 从资源加载文件
- javascript - 如何在 POST 请求中调试 net::err_failed/415 Unsupported Media Type 错误?
- git - 在 git 上定义用户(在本地服务器上)并赋予他们不同的权限