2014-04-23 52 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