ember.js - 如何从 ember eventManager 访问父 View 和 Controller

标签 ember.js

Ember 之路:

根据 ember 的 documentation关于 View 的 eventManager,它们必须在父类定义中创建,如下所示:

AView = Ember.View.extend({
  eventManager: Ember.Object.create({ 

它将它们封装并与其父 View (AView)隔离。

访问事件上下文的唯一方法是通过与每个事件一起传入的view参数

dragEnter: function(event, view) {

我的情况:

我在一个包含许多 subview 、输入、复选框等的大 View 中处理各种拖动事件。 按照这种形式,我的代码开始竭尽全力确定每个事件源自哪个 subview ,然后采用不同的路径来访问公共(public)父 Controller :

drop: function(event, view) {
  var myController;
  if(view.$().hasClass('is-selected') || 
      view.$().hasClass('list-map-container')) {
    myController = view.get('controller.controllers.myController');
  } else if(view.$().hasClass('ember-text-field')) { 
    myController = view.get('parentView.parentView.controller');
  } else {
    myController = view.get('controller');
  }
  // do work with myController
}

我的黑客:

为了简化,我在父 View 中使用了 didInsertElement Hook 来将所需的 Controller 分配为 eventManager 上的属性:

App.MyView = Ember.View.extend({
  didInsertElement: function() {
    this.set('eventManager.controller', this.get('controller'));
  },
  eventManager: Ember.Object.create({
    controller: null,
    // ...

这可以显着简化我的事件处理程序:

drop: function(event, view) {
  var myController = this.get('controller');
  // do work with myController

我的问题:

我的直觉告诉我,这种破解方法并不是最好的解决方案。

也许我不应该在 eventManager 中完成所有工作?而是将所有这些工作移至 Controller 并仅从 View 转发事件?

但是如果 eventManager 是一个可接受的工作区,那么访问父 View Controller 的最佳方式是什么?

最佳答案

我知道这是一个迟到的答案,但这个问题是谷歌的结果。以下是我在搜索 emberjs 示例时的做法。

要访问 eventManager 中的 View ,您必须在事件函数处理程序中指定两个参数:

eventManager: Ember.Object.create({
  keyUp: function(event, view){
    view = view.get('parentView'); // The view parameter might not be the current view but the emberjs internal input view.
    view.get('controller'); // <-- controller
  }
}),

关于ember.js - 如何从 ember eventManager 访问父 View 和 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20254696/

相关文章:

ember.js - 布局模板不适用于组件

ember.js - Ember value绑定(bind)到Redactor所见即所得

javascript - 在页面的多个部分输出

javascript - 如何限制 ember.js 中 findAll 的结果?

ember.js - 如何在对象 Controller 中访问 ("init"上的 ember 模型

javascript - 如何在 JavaScript 字符串中编译 Ember Action ?

javascript - Ember 或 JQuery 中的 this.$() 是什么

javascript - Ember/Handlebars 提供 [object Object] 而不是来自 JSON 对象的字符串

ember.js - 使用 Ember Data 1.0 Beta 时 Model#typeKey 未定义

javascript - 页面转换后调用 jquery 事件