2009-08-10 3 views
2

Будучи новым для функционального программирования, я работал над javascript моего приложения (используя исключительно jQuery) и задавался вопросом, как система событий jQuery относится к его парадигме функционального программирования.Функциональный jQuery: пользовательские события или функции?

У меня есть функция setupAccountHeader, которая легко может быть либо документ переплете событие, как

$(document).bind('setupAccountHeader', function() { 
    blah, blah, blah; 
}); 

ИЛИ

var setupAccountHeader = function() { 
    blah, blah, blah; 
}; 

Затем, либо запускается или вызывается, когда это необходимо.

Поэтому у меня есть два вопроса:

1) Какой стиль предпочтителен для функциональной JQuery или это просто вопрос вкуса/личного стиля? Как насчет последствий для архитектуры большого изображения?

2) Есть ли хорошие ресурсы для функционально оформленного jQuery? Я чувствую, что это намерение Джона Ресига, но я не могу найти много информации или руководства о том, что это означает в реализации.

ответ

0
  • Официальный метод привязки события в jQuery является первой версией, таким образом, у вас есть аналогичные методы для связывания и отвязывания событий. Я думаю, что это не так уж и важно, поскольку он помогает читаемости кода, получает поддержку вашего кода и использует другие функции, связанные и включаемые в jQuery, например, предотвращение барботирования событий по умолчанию. Второй пример первого вопроса верен из JavaScript, но этот стиль не используется нигде в документации jQuery.

Update

Если связывать события и использовать преимущества normalized event system вы будете использовать первый вариант для регулярного (размытие, фокус, нагрузки, изменение размера, прокрутки, выгрузить, beforeunload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error) или ваши пользовательские события.

Они на самом деле не похожи. Чтобы быть похожими во втором, вам придется прикрепить к документу некоторые события. Попытайтесь отменить их, чтобы получить эту идею.

// first version 
$(document).unbind('setupAccountHeader'); // will cancel the binding of some action 
// second version 
setupAccountHeader = null; // will just cancel a variable 

Другой вариант просто замыкание, которое можно использовать везде в JavaScript, и используется в данном случае. Он не имеет никакого конкретного смысла без контекста.

  • Я не совсем понимаю второй вопрос. Может быть, вы можете детализировать то, что вы имеете в виду. Я не являюсь носителем английского языка.
+4

Интересно, но на самом деле не ответить на его вопрос. На самом деле, это даже не интересно. –

+0

@Robert Harvey Комментарий не очень полезен, не правда ли? –

+0

Я бы этого не сказал. Вы улучшили свой ответ, не так ли? +1 –

1

Хорошая вещь о втором стиле заключается в том, что он будет отображаться в стеке отладки отладчика с его именем, в отличие от «анонимного», что я считаю немного более полезным.

Вы можете достичь выше наряду с дополнительными механизмами событий JQuery (как сказал Elzo) со следующим:

$(document).bind('setupAccountHeader', setupAccountHeader); 
+2

Простым решением для этого является использование выражения [named function] (http://yura.thinkweb2.com/named-function-expressions/#named-expr): '$ (document) .bind ('setupAccountHeader', function setupAccountHeader() {...}); ' –

+0

+1 хех ... проверьте год, но тем не менее тонкая точка ... вероятно, не имеет значения в этой ситуации, но если обработчик события повторно использовать несколько объектов (особенно большое количество объектов), подход в ответе должен использоваться для эффективности - но мне нравится тот факт, что вы получаете лучшее из того, что это просто простой обработчик. –

Смежные вопросы