【发布时间】:2015-04-25 10:51:38
【问题描述】:
灰烬:1.11.3
Ember 数据:1.0.0-beta.16
jQuery : 1.11.2
我正在尝试将一个动作从一个控制器触发到另一个
控制器 A 正在尝试触发控制器 B 上的操作:
A{
needs: ['B'],
actions: {
foo: function(bar) {
this.get('controllers.B').send('foo', bar);
},
}
}
B{
actions: {
foo: function(bar) {
console.log("foo bar");
},
}
}
这是按预期工作的,当我引用更多控制器时,问题就来了:
A{
needs: ['B'],
actions: {
foo: function(bar) {
this.get('controllers.B').send('foo', bar);
},
}
}
B{
needs: ['C'],
name: null,
init: function () {
this.get('controllers.C').addObserver('name', this, function (sender) {
this.set('name', sender.get('name'));
});
},
actions: {
foo: function(bar) {
console.log("foo bar: " + name);
},
}
}
C{
name: "hello from C",
}
现在当我调用 B.foo(bar) 时,我得到:
foo bar:来自 C 的你好
当我调用 A.foo(bar) 时,我得到:
foo 栏:空
当我在函数中放置断点时,在第一种情况下,名称被定义,在第二种情况下(使用 C)。名称为空
我想我有上下文问题,但找不到...
编辑:上下文
我正在构建一个地图应用程序。我有一个数据控制器和视图。然后我有另一个视图和控制器负责在地图上绘图。当我添加数据时。
它基本上是 CRUD。当我点击绿色项目时,我想向绘图控制器发送一个动作,告诉他在地图上添加项目。
我想做什么:
//app/controllers/map-data.js
actions: {
positionItem: function(item) {
this.get('draw').send('toggleDraw', 'Point');
},
}
//app/controllers/map-draw.js
actions: {
toggleDraw: function (state) {
this.set('mtgDrawState', state);
},
}
我想尽可能在地图绘制控制器中绘制东西,在地图数据控制器中绘制数据。
我最终得到了什么(我不能一直这样)
actions: {
positionItem: function(item) {
$('.map-draw-point').click();
},
【问题讨论】:
-
这很难做到,因为它是一种反模式。尽量远离
needs。控制器是嵌套的吗?泡沫行动起来。兄弟姐妹?处理父级中的操作并向下发送新数据。也许您可以解释一下您要做什么。 -
好的,我已经更新了我的问题,如果你愿意,我可以稍后将你指向我的网络应用
-
向一个共同的父级注册地图,你可以发送动作。samselikoff.com/blog/…
-
感谢您对 Sam Selikoff 的评论,我对所有 ember.js 的东西都很陌生,我自己已经研究了几个星期。我正在为我所属的狗训练俱乐部构建一个应用程序。如果您能给我一些时间让我开始使用 ember.js 的组件方法,我将不胜感激。我已将代码放在 github 上,因为它都是开源的。 github.com/mylen/mantrailling
-
如果您愿意花一些时间来解决这个问题,您需要使用修改标题扩展来查看地图,请将引用者更改为 demo.melard.fr
标签: ember.js