Sto iniziando a imparare Ember e non è chiaro quale sia il metodo migliore, più accettabile o addirittura previsto per gestire gli eventi. È accettabile controllare la destinazione nell'argomento dell'evento delle funzioni di clic, dovrei creare una nuova vista per ogni elemento che richiede un evento diverso da {{azione}} o qualcosa di completamente diverso?Qual è il modo migliore per gestire gli eventi in Ember.js?
risposta
IMO è possibile utilizzare l'helper {{action}}
ove possibile. Se si desidera allegare eventi su un tag nel modello, utilizzare {{action}}
; non c'è bisogno di fare una nuova Vista:
<a {{action showPosts href=true}}>All Posts</a>
<form {{action validate target="controller"}}>
// ...
</form>
Un'eccezione a quanto sopra è quando si desidera gestire più di un eventi su un elemento specifico:
// Template
<ul>
{{#each post in controller}}
{{#view App.PostView}}
{{title}}
{{#if view.showDetails}}
<span>{{summary}}</span>
{{/if}}
{{/view}}
{{/each}}
</ul>
// View
App.PostView = Ember.View.extend({
tagName: li,
classNames: ['post-item'],
mouseEnter: function(event) {
this.set('showDetails', true);
},
mouseLeave: function(event) {
this.set('showDetails', false);
}
});
Come abbiamo bisogno di catturare sia mouseEnter
e mouseLeave
(per mostrare e nascondere rispettivamente i dettagli del post), è meglio farlo nella vista, evitando troppa logica nei modelli. Il modo alternativo per quanto sopra sarebbe quella di utilizzare il maggior numero di tag annidati, come il numero di eventi che vogliamo gestire (nel nostro caso, 2):
// Template
<ul>
{{#each post in controller}}
<li class="post-item" {{action showTheDetails post on="mouseEnter" target="controller"}}>
<span class="dummy" {{action hideTheDetails post on="mouseLeave" target="controller"}}
{{title}}
{{#if post.showDetails}}
<span>{{summary}}</span>
{{/if}}
</span<
</li>
{{/each}}
</ul>
E poi nel controller:
// Controller
App.PostsController = Ember.ArrayController.extend({
showTheDetails: function(event) {
var post = event.context;
post.set('showDetails', true);
},
hideTheDetails: function(event) {
var post = event.context;
post.set('showDetails', false);
}
});
Ma penso che sarete d'accordo che questo è più brutto. Vedi here.
Nei casi in cui si desidera utilizzare una vista di controllo Ember (Ember.TextField, Ember.TextArea, ecc) non hai scelta, ma per acquisire gli eventi nella vista. Quindi, si estende la vista di controllo e definire i gestori di eventi in Vista:
// Template
<legend>Add a comment</legend>
{{view App.CommentInputField valueBinding="comment"}}
// View
App.CommentInputField = Ember.TextField.extend({
focusOut: function(event) {
this.get('controller').validateComment();
},
keyDown: function(event) {
if (event.keyCode === 13) { // Enter key
this.get('controller').createComment();
return false;
}
}
});
- 1. Qual è il modo migliore per gestire gli aggiornamenti quando il calendario sincronizza nuovi eventi?
- 2. Qual è il modo migliore per gestire più azioni?
- 3. Qual è il modo migliore per gestire più eventi chiave in Javascript?
- 4. Qual è la procedura migliore per gestire gli eventi di ridimensionamento in un elemento polimerico?
- 5. Qual è il modo migliore per gestire gli utenti in ASP.NET MVC
- 6. Qual è il modo migliore per lavorare con gli eventi a tempo in WPF
- 7. Qual è il modo migliore per gestire le dipendenze circolari tra gli oggetti?
- 8. Qual è il modo migliore per gestire gli snippet di codice su Xcode?
- 9. Qual è il modo corretto di gestire gli eventi in C++?
- 10. Il modo migliore per gestire l'unione JPA?
- 11. Qual è il modo corretto di gestire gli eventi Fragment deprecati su Attacco e onInflate
- 12. Come gestire meglio gli eventi
- 13. Qual è il modo ottimale per gestire le immagini rotte?
- 14. Il modo migliore per gestire un KeyNotFoundException
- 15. Il modo migliore per gestire l'overflow integer in C#?
- 16. Qual è il modo migliore per gestire la matematica del tempo in Perl?
- 17. Qual è il modo migliore per gestire un albero delle dipendenze in .NET?
- 18. Qual è il modo migliore per gestire i rami delle filiali del fornitore in SVN?
- 19. Qual è il modo migliore per gestire un errore di recupero in caso di risposta rapida?
- 20. Qual è il modo migliore per gestire le classi co-dipendenti in C++?
- 21. Qual è il modo migliore per gestire questa trasformazione di sequenza in Clojure?
- 22. Qual è il modo migliore per gestire il processo unix da java?
- 23. Qual è il modo migliore per gestire GoBack per le diverse piattaforme MvvmCross (v3)
- 24. Qual è il modo migliore per rilevare l'eccezione nell'attività?
- 25. Qual è il modo migliore per gestire cert/chiave per contenitori Docker che devono comunicare TLS
- 26. Qual è il modo migliore per impaginare una classe C#?
- 27. Qual è il modo migliore per strutturare questo codice Drag & Drop da Linq ad eventi?
- 28. Il modo migliore per clonare gli osservabili?
- 29. Qual è il modo migliore di adattare questo sistema di sicurezza per gestire l'ereditarietà multipla?
- 30. Qual è il modo migliore per documentare il codice f #?
FYI: Eventi come '' mouseEnter' o mouseLeave' non dovrebbe essere gestita dal aiutante azione (vedi la discussione in https: // GitHub .com/emberjs/ember.js/issues/1011 e commento specifico https://github.com/emberjs/ember.js/issues/1011#issuecomment-6367539) – pangratz
Ok, quindi alla fine se hai un sacco di eventi a cui non è adatto il metodo di aiuto {{action}}, finirai per avere parecchie visualizzazioni. – TestDemoTest