2017-06-12 14 views
8

Czy istnieje sposób na ponowne wysłanie Ember.Component?Jak wymusić ponowne wysłanie Ember.Component?

Istnieje metoda .rerender(), ale to nie pomaga. Również próbowałem korzystanie .notifyPropertyChange na szablonie, layoute - ten sam

Teraz w takich przypadkach muszę zawinąć kawałek szablonu do if owijki i przełączać wartość bandery. Ale droga jest brzydka i nudna.

Wszelkie pomysły?

+0

Ja też podążam tym samym podejściem 'if' bloku z wartością flagi przełączania .. przez jakiś czas. Czy chciałbyś mieć coś, co wymusiłoby zniszczenie i uczynienie komponentu świeżym, – kumkanillam

+4

, dlaczego musisz się ponownie zgłosić? – ykaragol

+4

Jak sugeruje komentarz @ ykaragol, nie trzeba zmuszać do ponownego renderowania komponentu (przynajmniej nie mogę wymyślić powodu). Być może będziesz mógł wyjaśnić, dlaczego musisz to zrobić (lub jeszcze lepiej, podać kod, który pokazuje, dlaczego)? Jedną z przyczyn, dla których silnik renderujący Ember jest szybki, jest to, że w razie potrzeby przerysowuje części DOM (np. Jeśli obiekt danych stanowiących kopię zapasową został w jakiś sposób zmodyfikowany). Jeśli lepiej zrozumiemy dlaczego, możemy zaproponować alternatywne metody, które będą bardziej zgodne z tym, jak Ember działa/będzie działać lepiej niż przerysowywanie całego komponentu. –

Odpowiedz

0

Spójrz na Ember Run Loop

Aby zastąpić ten proces „t” można użyć coś takiego:

showElement: false, 

actions: { 
    buttonClick() { 
    Ember.run(()=> { 
     this.toggleProperty('showElement'); 
    }) 
    } 
} 

To zmusi pętlę run, aby ponownie uruchomić zamiast Ember obsługi każdą własność zmiany i decydowanie o sposobie wykonywania kodu, podobnie jak pętla zdarzeń JavaScript.

dobre wyjaśnienie tego można znaleźć here

+0

Muszę ponownie wydać składnik - jak może mi pomóc? –

+0

Jeśli znasz pętlę ember run, zrozumiesz, jak ponownie wyświetlić głośne słowa składowe – DeclanPossnett

+0

). Czy możesz podać kod? –

0

miałem ten sam problem z jednym z moich komponentu. Jak twierdzi społeczność, nie powinieneś tego robić, jeśli użyjesz właściwego wzoru embera.

Jednak, jak to było w konkretnym przypadku, znalazłem drogę dookoła.

Musisz utworzyć działanie w routes/somefile.js odświeżyć jak tak:

actions: { 
    refresh() { 
    this.refresh(); 
    } 
} 

i w widoku komponentu, dodaj ukryty przycisk, aby kliknąć na działanie routera jak tak

<button id="refresh_invoice" class="hidden" {{action 'refresh'}}></button> 

oraz w twoim komponencie, używając Jquery, będziesz mógł kliknąć ukryty przycisk, a to odświeży komponent.

To nie jest świetna poprawka, ale to działa. Hop to pomoże.

+0

refresh zmusi składnik do ponownego wydania, ale nie zerwie komponentu i nie przerysuje całkowicie. – kumkanillam

+0

Czy możesz podać link do dokumentacji? Można znaleźć metodę '.refresh' w API –

+0

https://emberjs.com/api/ember/2.15/classes/Ember.Route/methods/refresh?anchor=refresh, ale @kumkanilliam ma rację, zauważy przerysowanie całego komponentu, ale jeśli jest to tylko odświeżenie niektórych danych, może zadziałać tak, jak dla mnie – Djamel

Powiązane problemy