Я работал с некоторой обработкой событий в Javascript и недавно решил перейти с Prototype на jQuery. Я уже столкнулся с некоторыми проблемами при использовании Prototype, но нашел некоторые обходные пути, которые, по крайней мере, решили проблемы, но выглядели не очень хорошо для меня. Теперь я все переписываю, я бы хотел, чтобы все было прямо на ходу. Если возможно, я бы хотел услышать ваш совет по поводу некоторых «лучших практик» по этому вопросу.
Краткое описание: я создал прототип 'objectList', который позволяет вам выбирать элемент (который, в свою очередь, приводит в движение некоторые другие вещи). Чтобы упростить жизнь, он использует «searchList» (еще один прототип, который я написал), который позволяет выполнять инкрементальную фильтрацию поиска и оперативную сортировку перечисленных элементов. Список поиска является членом списка объектов, как видно из кода ниже. Если щелкнуть элемент, список поиска вызывает (настраиваемое) событие, на которое затем должен ответить список объектов. Прямо сейчас я использую этот подход:
var self = this;
$(this.searchList).bind('objectSelected', function() {
self.selectObject(self.searchList.getSelectedId());
});
В Prototype я использовал bind()
обратный вызов к this
, чтобы я мог получить доступ к тому же this
оттуда ( Управление значением 'this' в событии jQuery ). Однако jQuery, похоже, не имеет встроенной поддержки привязки области видимости, и, вероятно, по какой-то причине. «self
-approach» работает, но мне было интересно, считается ли это «хорошим кодом» или это, вероятно, предзнаменование плохого дизайна программы.
Кроме того, я иногда использовал, чтобы сделать обратный вызов членом «родительского» объекта, например так (примечание: синтаксис прототипа):
init: function() {
var self = this;
this.searchList.observe('objectWasSelected', this.objectSelected.bind(this));
}
objectSelected: function() {
this.selectObject(this.searchList.getSelectedId());
}
но, подумав об этом, он показался мне невероятным. Итак, основной вопрос: действительно ли мой новый подход (самый верхний код, использующий self
) действительно лучше, и что еще более важно, есть ли еще лучше ? Всегда стараюсь улучшить свои навыки, особенно в отношении хорошего дизайна программы, поэтому, если кто-то сможет пролить свет на это, я буду очень благодарен!