Dev мисли…

Имах ужасно напрегната седмица, в която за 3-4 дни трябваше да се нахвърли едно приложенийце лежащо основно върху GoogleMaps и ajax заявки. Та реших да споделя някои неща, които по един или друг начин ми помогнаха да свърша работата (надявам се) добре и в крайно кратки срокове. По-долу примерите ползват основно jQuery.

Closures

Тук са разяснени доста подробно. Аз само ще се опитам да ги обясня с няколко мои думи.
Нека вземем следния пример:

  var foo = "foooo";
  setTimeout (function(){
    alert (foo); // "foooo"
  }, 100);
  

При изпълнението на анонимната функцията в setTimeout тя има достъп до всички променливи в контекста на обявяването и. Това е нещо изключително полезно, и спестяващо доста код, особено при закачане на различни събития.
Тук обаче има една важна подробност – да вземем следния пример ползващ jQuery, да прихване click събитие на различни елементи с id от ID0 до ID3 и да покаже съответният текст от arrayText:

  var arrayText = ["text0", "text1", "text2", "text3"];
  for (var i=0; i < arrayText.length; i++) {
    $("#ID" + i).click(function(){ 
      alert (someArray[i]) // undefined
    });
  };

Проблема идва от това, че (с най-прости думи) в момента в който се изпълни click събитието стойността на i е вече 4.
Естествено, ние не се отчайваме защото има сравнително лесно решение:

  var arrayText = ["text0", "text1", "text2", "text3"];
  for (var i=0; i < arrayText.length; i++) {
    (function(){
      var text = arrayText[i];
      $("#ID" + i).click(function(){ 
        alert (text) // правилният текст е тук
      });
    })();
  };

Така затворихме критичните обръщения към променливи в анонимна функция, която запазва правилния контекст. Готино.

LowPro & liveQuery

LowPro и liveQuery са два изключително полезни плъгина за jQuery, когато се налага голямо количество генериране на DOM елементи и обработка на събития. Нека илюстрираме: 🙂

  myHandler = $.klass({ // дефинираме LowPro handler 
    onclick: function (e) {
      return confirm ("Are you sure?");
    }
  });
  
  $("a").attach(myHandler); // прикачване на по-горе дефинирания код за всички A тагове на страницата

Нищо особено на пръв поглед. Но... LowPro автоматично следи за наличието на liveQuery и горния код ще се изпълнява и за всички динамично добавени A тагове. Готино. Няма повече да се следи пристигналият с ajax html от сървъра и да му се прикачат на ново събитията. А и кода е прилично отделен и лесен за доработка и ползване.

Google Maps API

Въпреки, че API-то е прекрасно направено, ми се стори че има някои странни неща. Например GMarkerManager.removeMarker(marker) само скрива дадения маркер, а не го маха от DOM-а и от markerManager-a. Странно.
Освен това си мисля, че щеше да е добре на GMap2.panTo(), да може да му се закача един callback, изпълняващ се след като картата се е преместила до желаната позиция.

Малко ми се наложи и да разширя GMarker обекта, но това става лесно:

  GMarker.prototype.setMyProperty = function (newValue) {
    this.myProperty = newValue;
  }
  GMarker.prototype.getMyProperty = function () {
    return this.myProperty;
  }

Готино. OOP в действие 😉

И още...

Пишете четлив код. Дори когато бързате адски. Струва си всяка отделена секунда.
А за коментарите си знаете 🙂
И още нещо - ако една функция е по-дълга от екрана и се налага да скролиратe за да видите началото и края - значи нещо не е наред 🙂

Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback: Trackback URL.

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

  • Categories

  • Recent Comments

    • Tuzemec: Уф… това беше преди 2 години 🙂 Даже повече. Тогава нямаше обмитявания и митници. След това май...
      2033 days 9 hours
    • Dimitar: Здравей! Имаше ли накакви проблеми с доставката? Трябваше ли да ходиш до митница да ги обезмитяваш?...
      2035 days 20 hours
    • nname: много ревърб си пуснал, може леко да се “опразни” микса за да изпъкнат и ударните инструменти...
      2157 days 16 hours
    • ivan: интернет експлорер 6 не трябва да се маха! защо всички искате да я махнат на мен ми харесва и аз искам да не я...
      2167 days 14 hours
    • nname: продай го за каса уиски на Астрал за поредния им албум 🙂
      2397 days 15 hours
  • RSS Links