Ich beginne zu lernen Ember und es ist nicht klar, was die beste, akzeptabelste oder sogar beabsichtigte Methode, um mit Ereignissen umzugehen ist. Ist es akzeptabel, das Ziel im Ereignisargument click functions zu überprüfen, sollte ich für jedes Element, das ein anderes Ereignis als {{action}} oder etwas völlig anderes benötigt, eine neue Ansicht erstellen?Was ist der beste Weg, um Ereignisse in Ember.js zu behandeln?
Antwort
IMO sollten Sie die {{action}}
Helfer wo möglich verwenden. Wenn Sie Ereignisse an einem Tag in der Vorlage anhängen möchten, verwenden Sie {{action}}
; keine Notwendigkeit, eine neue Ansicht zu machen:
<a {{action showPosts href=true}}>All Posts</a>
<form {{action validate target="controller"}}>
// ...
</form>
Eine Ausnahme von der oben ist, wenn Sie mehr als eine Ereignissen auf einem bestimmten Element zu handhaben wollen:
// 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);
}
});
Da wir beide mouseEnter
erfassen müssen und mouseLeave
(um die Details des Beitrags anzuzeigen bzw. zu verbergen), ist es besser, dies in der Ansicht zu tun, wobei zu viel Logik in den Vorlagen vermieden wird. Der alternative Weg für die oben würde so viele verschachtelten Tags, wie die Anzahl der Ereignisse zu nutzen, die wir behandeln möchten (in unserem Fall 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>
Und dann in der Steuerung:
// 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);
}
});
Aber ich denke, Sie werden mir zustimmen, dass das hässlicher ist. Siehe here.
In Fällen, in denen Sie Ember Steuer Ansichten (Ember.TextField, Ember.TextArea, etc.) Sie haben keine andere Wahl verwenden möchten, aber Ereignisse im Blick zu erfassen. So verlängern Sie die Steuerungssicht und definieren Sie die Event-Handler in der Ansicht:
// 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. Was ist der beste Weg, um mehrere Aktionen zu behandeln?
- 2. Was ist der beste Weg, um mehrere Suchoptionen zu behandeln?
- 3. Der beste Weg, um Fehlermeldungen zu behandeln
- 4. Der beste Weg, um Fehler zu behandeln
- 5. Was ist der beste Weg, Ausnahmen in Perl zu behandeln?
- 6. Was ist der beste Weg, um mehrere Schlüsselereignisse in Javascript zu behandeln?
- 7. Was ist der beste Weg, Zeitzonen mit Javascript zu behandeln
- 8. Der beste Weg, um Integer-Überlauf in C# zu behandeln?
- 9. Was ist der beste Weg, um Event mit SDL/C++ zu behandeln?
- 10. Was ist der richtige Weg, um FB.Event.subscribe zu behandeln?
- 11. Was ist der richtige Weg, um Montageversion zu behandeln?
- 12. Der beste Weg, JPA Merge zu behandeln?
- 13. Was ist der (beste) Weg, um Daten vor Christus in C# /. NET zu behandeln?
- 14. Was ist der beste Weg, um Landschaft/Porträt Unterschiede in IB zu behandeln?
- 15. Was ist der beste Weg, um diese Art von inklusiver Logik in Ruby zu behandeln?
- 16. Was ist der beste Weg, um mehrere Objektabhängigkeiten in C++ zu behandeln?
- 17. Was ist der beste Weg, um lange laufende Prozesse in einer ASP.Net-Anwendung zu behandeln?
- 18. Was ist der beste Weg, um mehrere gleichnamige Dateien in Emacs zu behandeln?
- 19. Was ist der beste Weg, um die Benutzersitzung in ASP.Net zu behandeln?
- 20. Was ist der beste Weg, um FBOs in OpenGL zu behandeln?
- 21. Was ist der beste Weg, um sich wiederholende Formulare in MVC zu behandeln?
- 22. Der beste Weg, um NullPointerException nach Netzwerkanrufen zu behandeln?
- 23. Was ist der beste Weg, um in C++ zu casten?
- 24. Der beste Weg, um mehrere NSTableView (s) zu behandeln
- 25. Der beste Weg, um viele eingehende Pakete zu behandeln
- 26. Der beste Weg, um Flasche POST Unit Test zu behandeln
- 27. Der beste Weg, boolesche Flags zu behandeln
- 28. Was ist der bevorzugte Weg, um Ereignisse zu blasen?
- 29. Was ist der beste Weg, um zirkuläre Abhängigkeiten zwischen Objekten zu behandeln?
- 30. Was ist der beste/empfohlene REST-Weg, um große einzelne JSON-Antwort zu behandeln?
FYI: Veranstaltungen wie 'mouseEnter' oder' mouseLeave' soll nicht von der Aktion Helfern behandelt werden (siehe Diskussion in https: // Github .com/emberjs/ember.js/issues/1011 und spezifischen Kommentar https://github.com/emberjs/ember.js/issues/1011#issuecomment-6367539) – pangratz
Okay, also am Ende, wenn Sie eine Menge haben Ereignisse, für die die Hilfsmethode {{action}} nicht geeignet ist, haben am Ende einige Ansichten. – TestDemoTest