Ember: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(酒吧)时,我得到了:
foo bar:你好,来自C
当我打电话给A.foo(酒吧)时,我得到:
foo bar:null
当我在函数中放置断点时,在最后的情况下,名称被定义,在第二种情况下(使用C)。 name为null
我想我有上下文问题,但无法找到......
编辑:上下文
我正在构建地图应用程序。我有一个数据控制器和视图。然后我有另一个视图和控制器负责在地图上绘图。当我添加数据时。
它基本上是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();
},
答案 0 :(得分:0)
B{
needs: ['B'],
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);
},
}
}
应该是:
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);
},
}
}