Шаблон для передачи событий с использованием jQuery - PullRequest
1 голос
/ 07 мая 2009

Пожалуйста, посмотрите на код в конце, чтобы увидеть метод, который я использовал для связывания событий в моем коде jQuery. Я предпочитаю использовать bind, и, как вы можете видеть, я не люблю использовать анонимные функции в моих обработчиках событий.

Я использую именованные функции по следующим двум причинам:

  1. читаемость
  2. Множественные вызовы моих WireUpGlobalCommandClickEvents не добавят несколько обработчиков событий к нажатию моей ссылки.

У этого есть побочный эффект - мне нужно передать данные в OnAddNewSnippetClick, используя функциональность bind, поскольку в OnAddNewSnippetClick это теперь относится к элементу, вызвавшему событие.

Я всегда относился к JavaScript как к гражданину второго сорта, и, как вы можете видеть, я пытаюсь навязать здесь и свои соглашения, которые я использую в своем приложении ASP.NET MVC. Неужели моя паранойя из-за того, что несколько обработчиков событий добавляются неуместно? Есть ли лучший шаблон для подключения обработчиков событий с использованием jQuery?

SettingsController.prototype = {

    OnAddNewSnippetClick: function(event) {
        event.data.SettingsController.SettingsAjaxHelper.AddNewSnippet(event.data.Parameter, event.data.SettingsController);
    },

    WireUpGlobalCommandClickEvents: function(parameter) {
        $('#addSnippetLink').bind("click", { SettingsController: this, Parameter: parameter }, this.OnAddNewSnippetClick);
    }
};

1 Ответ

2 голосов
/ 07 мая 2009

Если вы действительно параноидально относитесь к нескольким связанным событиям, вы можете использовать live, которая автоматически связывает события на основе селектора.

 $(".stuff").live('click',function(){});

или

$("#element").one('click',function(){});

или

$("#element").unbind('click').bind('click',function(){});

Но да, похоже, вы пытаетесь сделать MVC в javascript, который, вероятно, излишним

http://docs.jquery.com/Events/live#typefn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...