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')
获取父视图,然后chain
send('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
选项:)