Ich habe eine Route und eine entsprechende Vorlage in meiner Ember-Anwendung. Beim Laden der Seite möchte ich einige Elemente basierend auf dem URL-Parameter ausblenden. Ich versuchte dies in der afterModel-Methode mit jquery $.("elementName").hide();
und einigen anderen Kombinationen. Aber nichts funktioniert, weil es scheint, dass das DOM noch nicht verfügbar ist. Das Gleiche kann erreicht werden wie eine Tastenaktion im Bereich Aktionen, aber es hilft mir nicht, wie ich es beim Laden der Seite tun möchte. Kann jemand darauf hinweisen, was ich falsch mache?So ändern Sie die Attribute eines HTML-Elements in emberJS aus dem afterModel oder einer ähnlichen Methode
Antwort
Der richtige Weg, dies zu tun, ist Ember zu verwenden und der Lenker {{#if}}
Helfer. Wenn Sie kombinieren diese mit queryParams
seine recht einfach:
Ihr Controller kann wie folgt aussehen:
export default Ember.Controller.extend({
queryParams: ['showSomething'],
});
Und Ihre Vorlage wie folgt aus:
<h1>Hello</h1>
{{#if showSomething}}
<div id="something">something</div>
{{/if}}
Wenn Sie wirklich wollen Um das DOM manuell zu manipulieren, können Sie dies im didInsertElement
Hook tun. Aber Sie haben diese nur in einer Komponente:
so die my-component.hbs
könnte wie folgt aussehen:
<div id="{{concat elementId "something"}}>something</div>
und Ihre my-component.js
export default Ember.Component.extend({
didInsertElement() {
this._super();
if(false) {
$(`#${this.get('elementId')}something`).hide();
}
}
});
aber ich empfehlen, gegen das!
Was ist der Zweck von this._super(), warum empfehlen Sie gegen diesen Ansatz? Ich habe dies in der Route selbst gelöst, indem ich didTransition und afterRender verwendet habe. Ich habe den folgenden Link verwiesen: https://discuss.emberjs.com/t/is-there-an-event-after-the-template-has-been-added-the-outlet/8737. Eine weitere Sache ist, dass ich ab sofort keinen Controller in meiner App habe. Ich denke, ich könnte es hinzufügen, aber ich bin mir nicht sicher, ob es nötig ist. Ich warte auf morgen, um Ihre Herangehensweise auszuprobieren. – Rahul
Checkout [diesen Link] (https://guides.emberjs.com/v2.11.0/object-model/classes-and-instances/#toc_overriding-parent-class-methods). 'das._super() 'ruft die überschriebene Methode auf. Und ich empfehle den ersten Ansatz, weil es die einzige Art ist, dies zu tun. Wenn Sie dies manuell tun, arbeiten Sie grundsätzlich gegen das Framework. Auch dies in der Route zu tun ist nicht unterstützt Verhalten ich denke.Ember könnte entscheiden, die Komponente jederzeit neu zu rendern. Auch wenn Sie Lenker verwenden, wird der Knoten tatsächlich aus dem DOM entfernt, und dies erhöht die Leistung. Auch warum sollte nicht so verwendet werden? – Lux
Sind Ihre URL-Parameter queryParams auf der Route? Wenn dies der Fall ist, können Sie Eigenschaften auf Ihrem Controller festlegen, um deren Vorhandensein (oder eine andere truthige Bedingung) zu überprüfen und diese in Ihrer Vorlage für die DOM-Anzeigezwecke zu verwenden. Sie können diese Werte sogar an untergeordnete Komponenten senden.
Routen/index.js
queryParams: {
q: {
refreshModel: true
},
colors: {
refreshModel: true
}
}
Controller/index.js
q: '',
colors: [],
hasSearch: Ember.computed.notEmpty('q'),
hasColors: Ember.computed.notEmpty('colors')
templates/index.hbs
{{#if hasSearch}}
<p>You are searching for {{q}}</p>
{{/if}}
// .. etc for colors
- 1. So verwenden Sie Attribute 'Mitglieder innerhalb einer Methode
- 2. So ändern Sie die @ Test-Methode dynamisch in TestNG
- 3. So ändern Sie die Helligkeit eines Bildes
- 4. So ändern Sie die Textfarbe eines Spinner
- 5. Verwenden eines Slugs in einer Emberjs-Route
- 6. So aktualisieren Sie effektiv die Attribute eines Objekts
- 7. So ändern Sie die Größe eines Bildhintergrunds
- 8. So ändern Sie die Größe eines Popover
- 9. So entfernen Sie Attribute eines Knotens (MSXML)
- 10. Mono.Cecil - So erhalten Sie benutzerdefinierte Attribute
- 11. Abrufen eines Bilds oder einer Arbeitsfläche aus dem Vorschaufenster
- 12. So erhalten Sie die verfügbaren Attribute eines Invantive SQL-Providers
- 13. So führen Sie die Methode nach Abschluss aus UILocalNotification cancelLocalNotification: in iOS 8 oder 9
- 14. So ändern Sie die Größe eines Eintrags in GTK +
- 15. Ändern eines Bildpfads in einer Genesis-Funktion - aus dem Ordner '/ images /' in die Medienbibliothek
- 16. So ändern Sie alle Attribute Namen mit behalten Sie die Werte in XML in C#?
- 17. Angular 2 Ändern Sie die Attribute
- 18. Test für Attribute aus dem Code anderer Attribute
- 19. So ändern Sie den Text eines Navigationsmenüs
- 20. Benutzerdefinierte Attribute aus dem Lambda-Eigenschaftsausdruck abrufen
- 21. Erhalten Sie alle Element Attribute aus einer sortierbaren Liste
- 22. Attribute erstellen, die mit dem Wert anderer Attribute berechnet werden
- 23. Datenbankschema eines ähnlichen Systems
- 24. Ändern Sie die Diagrammachsenwerte dynamisch aus dem Datenrahmen in Shiny
- 25. So ändern Sie die Gesichtsfarbe in Three.js
- 26. So ändern Sie die Schriftfarbe mitten im Satz
- 27. So ändern Sie die Entwicklerinformationen
- 28. So ändern Sie die Menüleiste durch oncreate() Methode
- 29. So ändern Sie den Wert eines Elements einer Sammlung
- 30. So ändern Sie die Größe eines gemeinsamen Speichers in Python
Sie können wahrscheinlich 'didInsertElement' verwenden. Aber das ist nicht Glimm-artig. Warum verstecken Sie die Elemente nicht standardmäßig und schalten sie bei Bedarf ein? –
@torazaburo das ist, was ich getan habe und es hat funktioniert. Ich musste den Haken didTransition und 'after-render' verwenden. Aber die ideale Methode wäre, Helfer wie unten erwähnt zu verwenden, ich werde es an meinem Morgen ausprobieren und Sie wissen lassen, ob es funktioniert. – Rahul
Ich denke, Sie könnten das "didTransition" -Event in Ihrer Route verwenden –