2015-06-30 26 views
19
İşte

yılında rotaya bileşeninden eylemi gönderme rota var))) rotanın bir rotayı harekete geçirebilmesini, böylece rotanın üzerinde hareket etmesini tavsiye edebilir. Ancak yukarıdaki kod işe yaramıyor - bileşen eylemi düzgün bir şekilde ele alıyor, ancak yöntemin içindeki sendAction çağrı hiçbir şey yapmıyor. ember.js

DÜZENLEME: bileşenin eylem yöntemi içinde

this._controller.send('closeModal'); ancak bu çözüm beni tatmin etmiyor:

kullanıyorum bu sorunu çözdü. Ember yazarlar, denetleyicilerin 2.0'da kaldırılacağını söylüyorlar, bu yüzden kodumda bunlara herhangi bir gönderme yapmak istemiyorum. Öneriler?

+0

Bize şablonu nerede gösterebilir: Bir yan not olarak

, kapatma eylemleri her zaman bunun rota eylem işaret izin için, bu eklenti bakmak olabilir de, sizin denetleyici işaret bileşeni kullanıyor musunuz? – GJK

cevap

30

Bir bileşenin yalıtılmış bir içeriği vardır. Bu yüzden, bileşenin dışındaki herhangi bir şey (yol veya denetleyici) hakkında hiçbir şey bilmiyor. Rotanıza bileşeninizden bir eylem gönderebilmek için, bunu sevdiği şablonunda bileşene rotanın eylemi geçmelidir:

// your template 
{{your-component closeModal="closeModal"}} 

Artık bileşeninde this.sendAction('closeModal') çağırdığınızda, bu verilen eylemi tetikleyecek Bu durumda, bu durumda rotanızın closeModal eylemidir. Daha fazla bilgi için

, dokümanlar (http://emberjs.com/api/classes/Ember.Component.html#method_sendAction)

GÜNCELLEME Ağustos Ember yeni sürümlerinde kapatma eylemleri karşılaştı olanlar için 3 2016

, ayrıca burada bu tür eylemlerin faydalanmak olabilir bakın yapıyor:

// your template 
{{your-component closeModal=(action "closeModal")}} 

Bu eylem yardımcı kontrolörünüzün bir eyleme işaret eder, senin bileşende Arayabileceğin this.attrs.closeModal() veya 'u aramak yerine eylemi tetiklemek için.

Bu eylemlerin yararı, eylemin bileşende kullanılabilecek bir değer döndürmesidir. Bir modal durumunda, örneğin, bir modalın closeAction çağrılması durumunda kapatılıp kapatılamayacağını belirlemek için kullanılabilir, örneğin false döndürürse, modalın kapanmasını önlemeye karar verebilirsiniz. https://github.com/DockYard/ember-route-action-helper

+0

Bunu yapmak için 'daha güzel' bir yol var mı? Tüm eylemleri göndererek ya da yalnızca özniteliği tanımlayarak ör. {{Kendi bileşeninizdeki closeModal}}? Teşekkürler – rssfrncs

+2

@rssfrncs Düşünebildiğim tek şey, 'closeModal:' closeModal '' bileşeninize ekleyerek, 'sendAction ('closeModal')' çağrıldığında varsayılan olarak 'closeModal' eylemini çağırır. Bu nedenle, şablonunuzdaki bileşeni tanımlarken artık eylemi geçmek zorunda değilsiniz. – jcbvm

+5

"[Bileşen], [kendisi] dışındaki herhangi bir şey (rota veya denetleyici) hakkında hiçbir şey bilmiyor" - bu yanıtı okumadan önce kavrayamadığım çok önemli bir kavram. –