Ember.js 余烬组件';s sendAction()以查看目标
余烬中的Ember.js 余烬组件';s sendAction()以查看目标,ember.js,Ember.js,余烬中的sendAction()。默认情况下,组件将冒泡到控制器,这是预期的。但是我有2,3个动作,我需要发送到使用组件的相应视图。在模板中,我们使用target=view设置要查看的操作。我们能做到吗 更新:目前,作为一种解决方法,我将视图对象发送到组件,该组件从那里调用view.send()来发送操作。但是我觉得这是不对的。好吧,经过一番思考,我相信我知道你的意思。如果您有一个组件,并且您有一个操作,那么它将由组件本身处理。如果要在组件外部发送操作,请使用sendAction 现在,由于您的
sendAction()
。默认情况下,组件将冒泡到控制器,这是预期的。但是我有2,3个动作,我需要发送到使用组件的相应视图。在模板中,我们使用target=view
设置要查看的操作。我们能做到吗
更新:目前,作为一种解决方法,我将视图对象发送到组件,该组件从那里调用
view.send()
来发送操作。但是我觉得这是不对的。好吧,经过一番思考,我相信我知道你的意思。如果您有一个组件,并且您有一个操作,那么它将由组件本身处理。如果要在组件外部发送操作,请使用sendAction
现在,由于您的组件是基于视图的,所以要将保存您的组件的视图作为目标,您可能可以执行此操作。get('parentView')
获取父视图,然后chainsend('nameOfAction')
因此,它将是组件操作中的this.get('parentView').send('nameOfAction'),然后它将触发嵌入组件的父视图上的操作
因此,在您的组件中,您可以:
App.DemoCompComponent = Ember.Component.extend({
actions: {
internalTrigger: function() {
//just an alert to make sure it fired
alert('Internal action was caught on component');
//this should target parent view component is in
this.get('parentView').send('viewTriggerTest');
}
}
});
现在,假设您在索引模板中有一个组件,您可以:
模板将是:
<script type="text/x-handlebars" data-template-name="index">
<h2>Inside Index Template</h2>
{{demo-comp}}
</script>
App.IndexView = Ember.View.extend({
actions: {
viewTriggerTest: function() {
alert('View Trigger Test Worked on Index!');
}
}
});
这是一个jsbin
对于最新的Ember 2.9,建议的方法是将
关闭操作
传递给子组件。属性target
和parentView
是私有属性。我相信如果您只使用{{action“someAction”}在组件的模板中,并在针对组件本身的组件的操作哈希中处理。如果我的英语不好,很抱歉。但我要问的是,一旦我们进入组件的操作哈希,如果我需要冒泡操作,我们需要使用sendAction()
方法。但这只会让控制器产生泡沫。我无法冒泡查看使用该组件的用户。我想我知道您的意思。我现在将提交一个详细的答案。谢谢..我没有想到这一点。get('parentView')将在组件中工作:)如果您查看它的标题下方,将指定哪个类已扩展以创建所讨论的类。正如您所看到的,Em.Component
扩展了Em.View
,并且parentView
属性可用。^我理解您的意思。.但AIK组件实际上意味着完全独立。如果允许您访问父级的视图类对象,它没有满足那个要求……我很期待一些冒泡的选项,但我现在将选择parentView
选项:)