Javascript Ember.js-classNameBindings正在删除从外部添加的类
当Ember通过Javascript Ember.js-classNameBindings正在删除从外部添加的类,javascript,ember.js,Javascript,Ember.js,当Ember通过classNameBindings属性重新计算组件的类时,它会覆盖从外部添加的任何类,例如由jQuery直接添加到元素中的类 重构以通过classNameBindings以“余烬方式”添加类不是一个选项,因为我使用的是一个外部jQuery插件来添加它们 我想问题是因为Ember不知道添加的类,只是忽略了它们 对于这种情况,是否有一种干净的方法/解决方法 我用一个(如果有办法使用代码片段获得一个有效的ember示例,请让我知道,然后我编辑)在ember重新加载组件后,您需要恢复从
classNameBindings
属性重新计算组件的类时,它会覆盖从外部添加的任何类,例如由jQuery直接添加到元素中的类
重构以通过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
下面是一个更新的twidle:
从Ember 3.4开始,这个答案是最新的。我认为如果Ember和一个定制的jQuery插件管理同一元素的类,那么这个问题就不会顺利解决。您是否考虑使用子元素作为<>代码>完美滚动条< /代码>的容器?另一个选项是根本不使用
classNameBindings
,而是使用一个观察者使用普通的老JavaScript或jQuery添加/删除类。