Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nazartokar/e485678da44b199f4cf7ca894797a93a to your computer and use it in GitHub Desktop.
Save nazartokar/e485678da44b199f4cf7ca894797a93a 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 и наслаждаться :)

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