Я взял на себя существующий проект, который использует JavaScript следующим образом. Я хотел бы понять, как это сделать, и получить дополнительную информацию о том, как эффективно использовать его. Есть ли название для этого шаблона, поэтому я могу сделать еще несколько исследований?Как этот шаблон JavaScript называется и как его использовать правильно?
index.html (до </body>
)
<script src="main.js"></script>
<script src="navigation.js"></script>
<script>
var navigation = new window.Navigation();
window.App.navigation = navigation;
window.App.navigation.init(this);
</script>
main.js (укоротить ...)
App = {};
$(document).ready(function(){
console.log('doc ready');
});
navigation.js (укороченные ...)
window.Navigation = (function() {
return function() {
return {
scope: undefined,
someElement:undefined,
init: function (pScope) {
this.scope = pScope;
this.someElement = $(this.scope.querySelectorAll('.some-element'));
this.someMethod();
},
someMethod: function() {
// some jQuery
if($(this).hasClass('some-class')) {
self.anotherMethod();
}
},
anotherMethod: function() {
// some jQuery
$(this.someElement).show();
this.yetAnotherMethod();
},
yetAnotherMethod: function() {
// some jQuery
$(this.someElement).stop().animate({duration:200});
}
};
};
}());
Помимо понимания того, что это за шаблон и почему его можно использовать, у меня есть практический вопрос:
Контроллер navigation.js отвечает за наш элемент .navigation
. Прямо сейчас, если существует более одного .navigation, взаимодействие с одним элементом .navigation заставляет все элементы .navigation реагировать на взаимодействие.
Как я могу запустить контроллер для управления каждым элементом .navigation для себя? (Я надеюсь, что мой словарный запас правильно здесь)
Это работает, если я называю контроллер (внутри index.html) следующим образом с JQuery, но он не чувствует себя хорошо:
'someMethod' выглядит как есть ошибка с помощью ссылки' this', также рекомендовал бы не использовать 'window.' и вместо того, чтобы просто ссылаться на переменные непосредственно –
Вы уверены, что это даже работает? Вставьте несколько предупреждений или консольных журналов в сценарий, чтобы узнать, запущен ли JS. –
Да, это работает. Я просто упростил код, потому что исходный материал - это способ долго писать здесь. – maze