2016-01-11 14 views
5

Używam Ember 2.2.0Korzystanie z this.sendAction() w komponentach?

Podczas pisania komponentów użyłem do propagacji zdarzeń od komponentu do trasy (lub innego elementu osadzającego komponent) z this.sendAction(…). Sprawdziłem ostatnio dokumenty i odkryłem, że doradzają inne podejście. https://guides.emberjs.com/v2.2.0/components/triggering-changes-with-actions/

this.get('action')(); 

Od Ember jest znany jako bardzo uparty Chcę trzymać aż do najlepszych praktyk, jak to możliwe. Ale nie jestem pewien, czy dokumenty mogą być nieaktualne lub samouczki używające sendActions.

Chciałbym więc, w jaki sposób to zrobić?

+0

Ważna jest wersja dziesiętna - Ember 2. co? –

+0

ember 2.2.0 przepraszam – maximusmusterus

+0

Założono, że najnowsza wersja instrukcji jest tak aktualna, jak to możliwe, zespół dokumentacji dołożył dużo starań, aby tak się stało. – locks

Odpowiedz

10

Kiedy używasz this.sendAction('actionName') jesteś przepuszczanie się działania, które będziesz musiał złapać na części/kontroler z actions

//controller/route/component.js 
actions: { 
    actionName: function() { 
    //Do something 
    } 
} 

Jeśli chcesz wysłać, że w górę łańcucha, będziesz Muszę ponownie zadzwonić pod numer sendAction('') na komponent/kontroler i ponownie go złapać na rodzica (i tak dalej).

Inne podejście this.get('action')() wykorzystuje akcje zamykające, które są zwykłymi funkcjami javascript. Jest to preferowany sposób wywoływania akcji w Ember 1.13.X, o ile wiem. Jedną z tych rzeczy, które mają działanie zamykające, jest to, że możesz mieć wartości zwracane. Co oznacza, że ​​można mieć coś takiego:

//a controller 
actions: { 
    saveResult() { 
    return this.get('model').save(); //notice the return (which returns a promise) 
    } 
} 

//some template that uses the controller above 
{{a-component save=(action 'saveResult')}} // Passes the saveResult action to the component 

//a-component.js 
actions: { 
    someAction: function() { 
    this.attrs.save().then(() => { 
     //Do something with the return value 
    }); 
    } 
} 

Wiele można by napisać o działaniach zamknięcia, ale inni napisali o wiele lepiej niż ja, więc polecam następujące artykuły:

A jeśli jesteś nowicjuszem w całej koncepcji DDAU (Data Down Actions Up), naprawdę polecam Sam's article o tej koncepcji w ogóle.

Aktualizacja: Istnieje również dodatek (powiązany w komentarzach przez @locks), który umożliwia closure actions to bubble to routes.

+0

Dzięki za tę doskonałą odpowiedź! Sprawdzę artykuły. :) Wielkie dzięki! – maximusmusterus

+0

Cieszę się, że mogę pomóc. Starałem się również nauczyć tych koncepcji! Życzymy powodzenia z pomocą Ember. –

+0

Dzięki! Jedyną wadą jest to, że nie mogę użyć {{my-component onSomething = (action 'theAction')}}, gdy 'theAction' jest zdefiniowana na trasie. Tak więc albo muszę użyć kontrolera (będzie on przestarzały, o ile wiem) lub zawinąć wszystko w dodatkowy komponent. W tej chwili chciałem obsłużyć określone działania modelu (edycja, tworzenie) na poziomie trasy. – maximusmusterus

Powiązane problemy