Skip to content

Instantly share code, notes, and snippets.

@blia
Created November 7, 2014 11:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save blia/4d1b64127a0a6fa1b095 to your computer and use it in GitHub Desktop.
Save blia/4d1b64127a0a6fa1b095 to your computer and use it in GitHub Desktop.

Собствеено зачем нужен твой код. он должен решить следующую проблему случайного переопределения функции Но он ее не решает. Тк вызывает функцию из глобального scope window

Те мне например надо доработать твой сайт. Я не знаю всех твоих функций и создаю с таким же именем. И оп - имеем проблему Моя доработка сломает твой код.

Так мы эту проблему решим и немного улучшим кейс

  // обрабатываем все объекты с data-action
  $("[data-action]").click(function(e){ 
    // запрещаем событие по умолчанию
    e.preventDefault();
      
    // защитим наши имена неймспейсом
    var ns = 'blia'

    // узнаём название функции
    var event_name = $(this).attr("data-action"); 
      
    // Запускаем наше событие
    $(document.body).trigget([ns,event_name].join('.'), e, this)  
  })

Просто слушаем событие

$(document.body).on('blia.addToFavorite', function(e, element){
  // do stuff...
})

Теперь мы точно уверены, что наш код выполнится А также мы можем на одно событие повесить несколько функций И например, разделить логику и декорации

// actions.js

  $(document.body).on('blia.addToFavorite', function(e, element){
    // Добавляем пост в избранное
  })
//views.js

  $(document.body).on('blia.addToFavorite', function(e, element){
    // меняем класс
  })

Главное. Никода не объявлять переменные(функции в тч) в глобальном контексте. Только в обусловленных ситуациях. А еще лучше использовать гторовые решения. Например react.js и наслаждаться :)

@nazartokar
Copy link

Ще раз побачив.
Круто, дякую.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment