javascript - 从 DOM 元素获取 Ember 组件

标签 javascript ember.js

我有一个 Ember 组件……

export default Ember.Component.extend({
    didInsertElement: function() {
        this.$().sortable({
            connectWith: '.droppable-box',
            receive: (e, ui) => {

            }
        });
    },
    tagName: 'ul',
    classNames: ['droppable-box', 'list-unstyled']
});

可排序组件内部的元素也是组件...

export default Ember.Component.extend({
    tagName: 'li'
});

每当一个元素被移动到一个可排序的组件中时,接收事件就会被触发。

我获得了 DOM 元素,但我想访问该 Ember 组件的实例。有什么想法吗?

最佳答案

这不是最干净的解决方案,但它应该有效。

在您的子组件中添加以下生命周期钩子(Hook):

//components/child-component.js
...
registerRow: Ember.on('willInsertElement', function () {
  this.attrs.onRegister(this.get('elementId'), this);
}),

unregisterRow: Ember.on('willDestroyElement', function () {
  this.attrs.onUnregister(this.get('elementId'));
}),

在父模板中,将操作处理程序传递给所有子组件:

//components/parent-component.hbs
{{#each children as |child|}}
  {{child-component onRegister=(action "registerChild") onUnregister=(action "unregisterChild")}}
{{/each}}

在父组件中,创建一个字典来存储由其 elementId 索引的子组件:

//components/parent-component.js
...
children: null,

initChildren: Ember.on('init', function () {
  this.set('children', {});
}),

actions: {
  registerChild(elementId, child) {
    this.children[elementId] = child;
  },

  unregisterChild(elementId) {
    delete this.children[elementId];
  }
}

现在,要从 jQuery 回调中访问组件,请执行以下操作:

// Presuming ui is a DOM element
receive: (e, ui) => {
    let component = this.children[ui.id];
}

关于javascript - 从 DOM 元素获取 Ember 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33809058/

相关文章:

javascript - Ember 如何在手动刷新页面时保留查询参数?

javascript - Ember.js (v2.4.5) 组件未传递第二个操作

javascript - React JS 站点上的 Google Analytics 输出不正确的数据( session 中断?)

javascript - 检测 JS Fade 何时完成,并运行更多代码

javascript - 在文本区域中的某些文本下显示错误符号 - 类似于拼写错误行

javascript - 未捕获的类型错误 : Object #<Object> has no method 'connect'

javascript - 'this' 在 emberJS 框架中真正代表什么?

javascript - Emberjs模型中的计算属性

css - 当我在我的 ember 应用程序中应用某个 CSS 类时,文本消失了

javascript - 在我的网站中显示来自 MongoLab 的数据