Ich versuche, meinen Code in eine mehr Plugin-Art von Code umzuwandeln, so dass alles getrennt wird, falls ich Klassennamen in der Zukunft ändern werde.Kann Eigenschaft 'dropdown' von undefined nicht lesen
Aus irgendeinem Grund, in meinem Code, bekomme ich Cannot read property 'dropdown' of undefined
.
Meine Vermutung ist, die Funktion Navigation.bindEvents()
läuft, bevor ich die Konfiguration einstellen, so kann es nicht finden ... Aber ich weiß nicht, wie man es löst.
Hier ist meine Navigation.js Datei:
let Navigation = {
config: {},
init(config) {
this.config = config;
this.bindEvents();
},
bindEvents() {
$(this.config.trigger).on('click', this.toggleNavigation);
$(document).on('click', this.hideAllDropdowns);
},
toggleNavigation(event) {
// Store the current visible state
var visible = $(this).siblings(this.config.trigger).hasClass('visible');
// Hide all the drop downs
this.hideAllDropdowns();
// If the stored state is visible, hide it... Vice-versa.
$(this).siblings(this.config.content).toggleClass('visible', !visible);
event.preventDefault();
event.stopPropagation();
},
hideAllDropdowns() {
$(this.config.dropdown + ' ' + this.config.content).removeClass('visible');
}
}
export default Navigation;
Und hier ist meine app.js-Datei, die ich alle init
Funktionen ausführen.
window.$ = window.jQuery = require('jquery');
import Navigation from './layout/navigation.js';
Navigation.init({
dropdown: '.dropdown',
trigger: '.dropdown-trigger',
content: '.dropdown-content'
});
Ich habe es für sie beide, wenn ich das Drop-down klicken, Es macht nichts, im Vergleich zu der vorherigen Situation, wo ich geklickt habe und es sagte 'Kann nicht Property Drop-Down von undefined '. – Akar
Der Fehler immer noch da? Wenn nicht, denke ich, es gibt ein anderes Problem in Ihrem Click-hanlder. Vielleicht sollten Sie $ (this.config.content) anstelle von $ (this.config.dropdown + '' + this.config.content) verwenden. –
Ich habe es behoben, Es war ein Problem im Zusammenhang mit der Verwendung von 'this, When Innerhalb eines Click-Handlers bezieht sich "this" nicht mehr auf das Objekt, in diesem Fall auf "Navigation", also habe ich alle "this" -Anweisungen in "Navigation" geändert. Ich bin mir nicht sicher, ob es eine gute Sache ist, aber es hat funktioniert. Ich werde diese Antwort auffrischen, weil sie mir einen Hinweis gab. Vielen Dank. – Akar