Ember.js - 打开模态动作不会冒出组件

时间:2014-05-29 02:24:11

标签: javascript ember.js

我关注了Ember.js&#39; Using Modal Dialogs并在ApplicationRoute中添加了一个动作处理程序。这很好,直到我尝试在组件的模板中使用相同的操作,在这种情况下,它不会在控制台中执行以下任何错误:Uncaught Error: Assertion Failed: The target for <appkit@component:user-info::ember451> (49.5) does not have a send { {1}}。

Here's一个JSBin演示了我的问题。请注意索引模板中指定的操作如何调用模式,但组件内指定的操作不会。 JSBin的要点是:

索引模板

method

用户信息组件模板

<!-- this creates the modal successfully -->
<button {{action "openModal" "modal-login"}}>open a modal (not in a component)</button>

<!-- this component has the same button as above in code, but clicking the button doesnt work -->
{{user-info}}

我已经找到了解决此问题的方法,但它非常hacky并且为我的组件添加了大量代码。在组件声明中,我复制了&#39; openModal&#39;动作并使其通过组件like so上的已注册操作发送操作。

2 个答案:

答案 0 :(得分:1)

您需要将操作发送到路由器操作。像这样:

App.UserInfoComponent = Ember.Component.extend({
  actions: {
        openModal: function(modalName) {
          console.log(modalName);      this.sendAction('openModal',modalName);
            }
        }
});

这是一个带有工作溶剂的jsbin: http://jsbin.com/fijujikape/1/edit?html,js,console,output

答案 1 :(得分:0)

您的修复是预期的行为,在组件模板中触发的操作旨在由组件处理。必要时,您可以像在指南示例中那样重定向您的操作。

如果希望将组件操作定位到控制器/路由约定流,则必须在组件子视图中将操作设置为组件本身。

 {{user-info tagName='button' 
   action='openModal' 
   context='modal-login' }}

http://jsbin.com/takatoyi/2/edit