Ember 2操作发送到路由而不是组件

时间:2016-09-08 13:00:19

标签: ember.js

在我的应用中,我已经定义了这个组件:

// components/buy-functions.js
export default Ember.Mixin.create({
    actions: {
        openModal: function() {
            $('#buyModal').openModal();
        }
    }
});

然后在路线的模板中:

<h5>Buy form</h5>
{{#buy-functions}}
    <div class="btn" {{action "openModal"}}>Buy</div>
{{/buy-functions}}

(该组件没有模板)

但是当我点击按钮时我得到错误&#34;没有任何处理&#34; openModal&#34;行动... 有人可以解释我在这里做错了什么吗?

2 个答案:

答案 0 :(得分:1)

您需要将行动发送到路线

 openModal: function(modalName) {
          this.sendAction('openModal',modalName);
            }
        }

将按钮更改为

<div class="btn" {{action "openModal" 'myModal'}}>Buy</div>

然后在你的路线

openModal: function(modalName) {
            //do whatever you want 
        }

但另一种方式是:

让我们将您的组件更改为

// components/buy-functions.js
export default Ember.Component.extend({
    actions: {
        openModal: function() {
            $('#buyModal').openModal();
        }
    }
});

然后创建您的组件模板

 // tempaltes/components/buy-functions.hbs
    <div class="btn" {{action "openModal"}}>Buy</div>

然后在您的路线模板中仅使用您的组件名称

{{buy-functions}}

我在飞行中编写了这些代码。希望对你有效。

答案 1 :(得分:1)

有一个附加组件(ember-route-action-helper)为这个用例提供帮助(路由操作)。

blog about it