2017-02-20 46 views
1

我正在使用2.10版本的ember js并且我试图从组件发送数据到路由。如何从组件发送数据以路由余烬?

这里是我的组件模板

<div class="pull-right search-section"> 
    <form class="form-inline search-box" {{action save on="submit"}}> 
     <button type="submit" class="btn"><i class="glyphicon glyphicon-search"></i></button> 
     <div class="form-group"> 
     {{input value=search class="form-control" placeholder="Search anything"}} 
     </div> 
    </form> 
    <a href="#" class="link-advance-search">Advance Search</a> 
</div> 

现在我想将数据从组件的js文件与“烬”下面的代码 进口灰烬发送到路线;

export default Ember.Component.extend({ 
    save: function() { 
     var search = this.get('search'); 
     console.log(this.sendAction('saveAction',search)); 
    } 
}); 

,并试图在路线js文件与下面的代码

import Ember from 'ember'; 
export default Ember.Route.extend({ 
    actions: { 
     saveAction: function(search_string){ 
      alert('fhdishf'); 
     } 
    } 
}); 

获得可惜没得到任何东西。

在此先感谢。

+0

使用闭包动作和[ember-route-action-helper](https://github.com/DockYard/ember-route-action-helper)插件。 – ykaragol

回答

2

如果控制器没有定义动作,您可以将动作发送到路由控制器,然后该控制器会冒泡到路由。

// Component in Template 
{{task-item content=task tasksController=this}} 

// Component Action 
actions: { 
    copyTask: function(){ 
     this.get('tasksController').send('your-action'); 
    } 
} 
2

内,您的模板文件,

{{task-item 
    data=model 
    innerActionName=outterActionName 
}} 

做事的余烬方式是数据了,操作起来。要通过数据反馈给控制器/路由器,你必须使它调用上行动(从控制器/路由器)

您的组件的JavaScript文件里面,

actions: { 
    componentActionName(param) { 
    this.sendAction("innerActionName", param); 
    } 
} 

componentActionName是你需要把什么在您的模板文件中触发组件JS文件中定义的函数。

内,您的组件HBS文件,

<div {{action "componentActionName" param}}>{{param}}</div> 

{{action "componentActionName" param}},是如何可以传递参数回组件,然后控制器/路由。

一件事

A组分应隔离,这意味着一个简单的组件不应该意识到周围的环境。它只有知道传递给它的数据,只能通过将动作和参数传递到正确的位置(路由)来执行数据操作。