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/