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

17

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

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

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

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

    
задан Stéphane Piette 18.07.2012 в 17:11
источник

3 ответа

17

В соответствии с вопросом # 569 несколько помощников действий для тега не поддерживаются. Чтобы обрабатывать несколько событий, вы должны использовать для этого пользовательский Ember.View . В вашем случае что-то вроде этого, см. Ссылка :

Рули

{{#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 здесь, просто чтобы проиллюстрировать, как я буду использовать ту же функцию для нескольких событий просмотра ...

    
ответ дан pangratz 18.07.2012 в 17:26
  • Я думаю, что это должно быть {{#view App.ActionView}} с #. –  silvenon 27.06.2014 в 22:39
10

Это, вероятно, будет поддерживаться в следующей версии Ember (1.13). PR, который его исправляет, находится здесь: Ссылка

    
ответ дан Luke Melia 08.06.2015 в 17:52
  • Теперь это должен быть принятый ответ, что ember - это устаревшие представления. –  0xcaff 10.08.2015 в 23:11
  • Команда Ember js действительно исправила эту проблему в 1.13; см. # 11373 на странице github.com/emberjs/ember.js/releases/tag/v1.13.0. –  Jacob van Lingen 15.12.2016 в 11:35
0

Я бы использовал ember-composable-helpers .

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

или

<button {{action (queue (action "backupData") (action "unsafeOperation") (action "restoreBackup"))}} />
    
ответ дан Charles 21.09.2016 в 21:43