2015-04-24 65 views
1

灰燼行動方面:1.11.3控制器發送的ember.js

灰燼數據: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"); 
    }, 
    } 
} 

臨屋那朵工作按計劃,日eproblem是當我有更多的控制器引用:

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吧:你好由C

當我打電話A.foo(條),我得到:

FOO欄:空

當我把一個斷點在功能,在抗凍情況下,名稱被定義,在第二種情況下(與C)。名稱爲空

我想我有背景的問題,但無法找出...

編輯:上下文

我'建立一個地圖應用。我有一個數據控制器和視圖。我有另一個視圖和控制器負責繪製地圖。當我添加數據。

enter image description here

它基本上是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

好的,我已經更新了我的問題,如果你願意,我可以在以後通過 –

+0

指向我的網絡應用程序並使用共同的家長註冊地圖,並且您可以發送行動。http://www.samselikoff.com/ blog/getting-ember-components-to-respond-to-actions/ –

回答

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); 
    }, 
    } 
}