我实现了一个基本的Ember组件,它将渲染一个Morris.js折线图。我需要听听morris上的click事件并将其传递给动作。
App.ProgressGraphComponent = Ember.Component.extend(
{
graph: null,
tagName: 'div',
renderGraph: function()
{
this.graph.setData(this.get('progress'));
}.observes('progress'),
didInsertElement: function()
{
var element = this.get('element').id;
var self = this;
this.graph = new Morris.Line(
{
element: element,
xkey: 'date',
ykeys: ['amount', 'increase'],
labels: ['Amount', 'increase'],
resize: true,
smooth: false,
parseTime:false
}).on('click', function(i, row){
self.set('clicked', row);
self.sendAction('goToSession');
});
}
});
在我的控制器中,当触发goToSession
事件时,它会传入component
对象。如果只是传入row
对象,我会更喜欢它。
这是使用action
参数向row
冒泡的正确方法吗?
答案 0 :(得分:1)
使用动作本身发送行对象可能更为可取。 Ember.js组件允许发送包含参数的动作。例如:
this.sendAction('goToSession', row);
在操作中转换为类似的东西(存在于控制器或路径中):
actions: {
goToSession: function(row) {
// manipulate morris row
}
}
详细了解如何在Ember.js components guide。
中的组件之外发送操作