Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.js-classNameBindings正在删除从外部添加的类_Javascript_Ember.js - Fatal编程技术网

Javascript Ember.js-classNameBindings正在删除从外部添加的类

Javascript Ember.js-classNameBindings正在删除从外部添加的类,javascript,ember.js,Javascript,Ember.js,当Ember通过classNameBindings属性重新计算组件的类时,它会覆盖从外部添加的任何类,例如由jQuery直接添加到元素中的类 重构以通过classNameBindings以“余烬方式”添加类不是一个选项,因为我使用的是一个外部jQuery插件来添加它们 我想问题是因为Ember不知道添加的类,只是忽略了它们 对于这种情况,是否有一种干净的方法/解决方法 我用一个(如果有办法使用代码片段获得一个有效的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添加/删除类。