Ember.Component sendAction()来查看目标

时间:2014-07-16 12:20:38

标签: ember.js

Ember.Component中的

sendAction()默认为预期的气泡到控制器。但我有2,3个动作,我宁愿发送到使用该组件的相应视图。在模板中,我们将操作设置为使用target=view进行查看。我们可以这样做吗?。

更新:目前,我正在将我的视图对象发送到组件,该组件从那里调用view.send()来发送操作。但我觉得这不正确。

2 个答案:

答案 0 :(得分:6)

经过一番思考后,我相信我知道你的意思。如果您有一个组件并且您有一个操作,它将由组件本身处理。如果要在组件外发送操作,可以使用sendAction。

现在,由于您的组件基于视图,因此目标视图的目标是组件,您可以this.get('parentView')获取父视图,然后链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 http://emberjs.jsbin.com/reyexuko/1/edit

答案 1 :(得分:0)

对于最新的Ember 2.9,建议的方法是将closure action传递给子组件。属性targetparentView是私有属性。