【问题标题】:Ember jQuery detach issueEmber jQuery分离问题
【发布时间】:2018-03-16 10:22:30
【问题描述】:

在我的 Ember 应用程序中,我正在尝试进行一些 DOM 更新(分离一些元素并将其附加到其他地方)

var comp = Ember.$(this.element).detach();
Ember.$("#some-sec").append(comp);

但是,由于某些原因,在执行此操作之后,早期的事件处理就被折腾了。 难道我做错了什么 ?对于 Ember 应用程序,这是否需要以不同的方式完成?

代码从组件内部调用如下;

didRender: function(){
    this._super(...arguments);
    Ember.run.debounce(this, this.updateCustomDOM, 20);
},

【问题讨论】:

  • this 是一个组件吗?事件处理程序(Ember 还是 jQuery?)绑定到什么?我认为我们需要了解更多有关 ember 上下文的信息。
  • 是的,这段代码是在自定义 Ember 组件中编写的。所以是的,'this' 指的是组件
  • 根据条件(当你想分离它时),Ember 方法是在 parent 组件中设置一个属性。喜欢{{#if condition}}{{childComponent someProp=value}}{{/if}}
  • ..但由于我看不到这种情况,所以很难回答。还有事件处理程序绑定到什么?
  • 为问题添加了更多细节......它是从组件的 didRender 句柄调用的。

标签: javascript jquery ember.js


【解决方案1】:
  1. 如果您需要将组件的元素移动到另一个位置,您 应该在didInsertElement 钩子里做。在重新渲染时,Ember 会正确更新它。
  2. append足以移动元素,你不需要detach

    Ember.$("#some-sec").append(this.$());
    
  3. 当我使用这种技巧时,我会在 移动元素之后附加事件(不确定是否重要)
  4. willDestroyElement钩子中的DOM中删除元素:

    this.$().remove();
    

this.$() 包含包裹在 jquery 的$() 中的组件元素

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2013-10-29
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多