这应该放在我的Ember View还是Ember Controller?

时间:2014-12-08 02:26:24

标签: ember.js

我有一个名为picker的余烬视图,它负责检测div上的click和mouseMove事件。检测到这些事件后,会将相应的呼叫发送到相应的控制器。

export default Ember.View.extend({
    templateName: 'picker',
    click: function (event) {
         this.get('controller').send('addColor', event);
    },
    mouseMove: function (event) {
         this.get('controller').send('updateColor', event);
    }
});

我的应用程序要求我使用事件对象的pageX和pageY属性执行一些逻辑,并使用div的属性(偏移,宽度,高度等)确定一些缩放因子。

应该在哪里完成这项工作?它应该包含在视图中,只是作为参数传递给操作方法,还是应该通过事件对象并使其成为控制器的责任?我的直觉说前者......

1 个答案:

答案 0 :(得分:1)

这听起来应该包含在组件中。

您可以将mouseMoveclick事件处理程序包装在组件中,控制器可以在这些事件触发时传递要调用的操作。例如,你可以有一个像

这样的组件
export default Ember.Component.extend({
    click: function (event) {
         this.sendAction('click');
    },
    mouseMove: function (event) {
         this.sendAction('mouseMove');
    }
});

并在模板中使用它

<div>
  {{#x-picker click="addColor" mouseMove="updateColor"}}
    <span> Track mousemove and click in here </span>
  {{/x-picker}}
</div>