Ember: обрабатывать несколько событий с помощью тега {{action}}?

Я использую Ember.js, и я пытаюсь иметь элемент div с двумя разными действиями: один при вводе мыши и один, когда мышь уходим. Я пытался:

<div {{action "stopInfo" on="mouseLeave"}} {{action "startInfo" on="mouseEnter"}}>

Но он вызывает только первое действие (mouseleave).

Есть ли способ иметь 2 действия над одним и тем же элементом? Благодаря

Ответы

Ответ 1

В соответствии с вопросом # 569 несколько помощников действий для тега не поддерживаются. Для обработки нескольких событий вы должны использовать для этого пользовательский Ember.View. В вашем случае что-то вроде этого, см. http://jsfiddle.net/pangratz666/2V9cP/:

Рули

{{#view App.ActionView}}
    ... content of div ...
{{/view}}

JavaScript

App.ActionView = Ember.View.extend({
    stopInfo: function(evt) { console.log('stop info'); },
    startInfo: function(evt) { console.log('start info'); },

    click: Ember.alias('stopInfo'),
    mouseLeave: Ember.aliasMethod('stopInfo'),

    mouseEnter: Ember.aliasMethod('startInfo')
});​

Я использовал помощник Ember.alias здесь, просто чтобы проиллюстрировать, как я буду использовать одну и ту же функцию для нескольких событий просмотра...

Ответ 2

Это, вероятно, будет поддерживаться в следующей версии Ember (1.13). PR, который его исправляет, находится здесь: https://github.com/emberjs/ember.js/pull/11373

Ответ 3

Я использовал бы ember-composable-helpers для этого.

<button {{action (pipe addToCart purchase redirectToThankYouPage) item}}>
  1-Click Buy
</button>

или

<button {{action (queue (action "backupData") (action "unsafeOperation") (action "restoreBackup"))}} />