2014-04-23 81 views
2

我正在嘗試製作可重用的組件。我想添加一個動作到這個組件,所以當用戶點擊一個按鈕時會發生一些事情。問題是,這個行爲沒有被調用。我這樣做是這樣的:Ember.js組件操作未觸發

DummyComponent.js

App.DummyComponent = Ember.Component.extend({ 
    actions: { 
    dummy_action: function() { 
     console.log('dummy_action fired!'); 
    } 
    } 
}); 

僞component.hbs

<p>dummy component</p> 
<button {{action "dummy_action"}}>Dummy action</button> 

組件是否正確渲染,當我包括我的應用。 hbs

{{ dummy-component }} 

但正如我所說,行動不是被解僱。

如果我使用相同的方法在我的控制器中創建一個動作,那麼該動作將被正確調用。

我在做什麼錯?

Thans!

回答

2

component guide

注:零部件必須有一衝着他們的名字。所以博客文章是 可接受的名稱,但帖子不是。這可以防止與當前 或未來的HTML元素名稱發生衝突,並確保Ember自動拾取 組件。

有一個示例here

每當餘燼找到未知的助手名稱時,它都會嘗試用ComponentLookup來解決它。在你的情況下,組件模板已成功解析,但它無法在容器中找到你的組件,並註冊/分配一個未實現你的動作處理程序的默認Ember.Component。

+0

非常感謝你@ppcano。這工作! – jjimenez

0

試試這個:

創建一個視圖:

MainAppView = Ember.View.extend({ 
    actions: { 
     dummy_action: function() { 
      console.log('dummy_action fired!'); 
     } 
    } 
}); 

然後在你的模板:

{{#view MainAppView}} 
    <p>dummy component</p> 
    <button {{action dummy_action target="view"}}>Dummy action</button> 

{{/view}} 
+0

感謝您的回覆@ juan-jardim.Yes的工作原理,但我試圖製作一個可重用的組件,並且我想知道爲什麼這些操作在組件中不起作用。據我所知,文檔很清楚這個:http://emberjs.com/guides/components/handone-user-interaction-with-actions/ – jjimenez

+0

也許你必須定義你的行動的目標 –

+0

我是不確定...文檔說明了這一點:「默認情況下,{{action}}助手會將操作發送到視圖的目標,通常是視圖的控制器(注意:對於Ember.Component ,默認目標是組件本身。)「http://emberjs.com/guides/templates/actions/#toc_specifying-a-target – jjimenez