我关注了Ember.js' 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上的已注册操作发送操作。
答案 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' }}