All streams
Search
Write a publication
Pull to refresh
19
0
Send message
Очень интересно, но почему-то автор не захотел привести пример популяций животный, как пример сложной системы. Мне кажется, было бы более наглядно.
Это, Вам, не про патентные войны читать.
3. в click обработчике лучше писать event.preventDefault(), чем return false. Поскольку return false это event.preventDefault() + event.stopPropagation(). Например, если у вас дополнительно собирается карта кликов — клики по ссылкам удаления не будут засчитываться

Это уже давно не так, было в ранних версиях jQuery, но они исправили.
Я с вами согласен, что не стоит на каждую ошибку заводить свой код, тем более из 5XX. Но, если вы используете Http протокол, то должны следовать правилам в его использовании, В целом, когда мы отдаем верный код ошибки, мы понимаем, что мы сделали не так. К примеру, мы неверно составил запрос, даже не читая кода сообщения, увидев, что код ошибки 400, я пойму, что я не верно задал параметры запроса. И код ошибки помогает разработчику, понять, в чем проблема. А далее мы уже можем прочитать тело ответа, в каком формате по соглашению. А по поводу перехода на новый протокол, мне интересно, как часто вам это приходиться делать? И очень трудно, без доработок вам просто удастся перейти на новый протокол, при том, что вы упоминаете прокси сервера. Прокси не будут поддерживать пул ошибок http протокола, но будут поддерживать не тривиальные протоколы?
Я не пойму зачем использовать, ошибки из пула 5XX, если их смысловая нагрузка в том что на сервере что-то произошло не так, ее можно использовать что бы сказать, что пока сервер не доступен. Достаточно писать кодов 200,404,400,403 и т.п, что бы сказать клиенту правильное состояние.В случае ошибок, добавить в ответ описание ошибки, прочитать ее и локализовать, если это необходимо, и парсить не придется можно просто текстом.
Пример который вы привели, отличается от того первоначального. Замете, что блок .b-comments не будет больше добавляется на странице. В отличии от тега a.
>Ваш пример лучше записать так:
$('body').find('a').on('click', '.external', function(e) {
//функция будет вызвана при клике на любую ссылку с классом external
});
Не вводите людей в заблуждение, функция будет вызвана только на тех элементах, которые существуют на странице. Если добавиться новый элемент, то обработчик не сработает.

Сейчас, у меня на подходе, как раз статья на эту тему. Отвечу, что приведенные, вами сигнатуры являются синонимами, поэтому даже падения производительности не будет. Приведенный вами пример, как раз относится, кому как удобно и где как удобно. Но к примеру, если вы будете использовать второй пример, вам будет проще в будущем, сделать делегирование событий(меньше строчек кода писать придется). Поэтому, если вы хотите что бы события слушались на новых элементах, вам следует применять прием, который приведен в статье. А если вы сделаете $('...').click() и $('...').on('click', function(), то события на новых элементах не будет обрабатываться. Вот пример learn.javascript.ru/play/qyQ3kb.
Здесь я с вами соглашусь, но, если Вы настроите, что по определенным url, сервер отдавал content-type:application/json, то тоже будет fail. Я, на самом деле, сразу использую конструкцию
$.ajaxSetup({
    dataType:'json'
});

Так как, другие типы ответа редко использую.
Небольшое дополнение, если на проекте вы используете jQuery UI. То в нем уже зашиты многие константы кодов клавиш в объекте $.ui.keyCode. Тут не стоит забывать, что если пишете какой-то плагин и соберитесь выкладывать в сообщество, нужно подумать, следует использовать или определить свои константы.
А я и не говорил, что success будет deprecated. Я говорю, о том, что лучше его использовать $.Deferred, это даст куда более читабельный код. К примеру код:
var cache = [];
function getData(id) {
  return cache[id]||$.post('/ajax/',{id:id}).done(function(data){
    cache[id] = data;
  });
}
function useData() { 
  $.when(getData(1)).done(function(){
    console.log(data);
  });
}
useData();

Это просто один из примеров, примянять можно по разному.
А вот по поводу, если на сервере произошла ошибка, то что вы укажете определенный тип возвращаемых данных, вам не поможет, все равно задействуете медот fail.
Но если задать не верный content-type, то часто отладчики вроде developer tool или firebug, во вкладке json отобразят, не то что вы ожидали увидеть. А ведь отлаживать, приходиться часто, и хорошо, если код писали Вы, а не кто-то другой и ответ верный вам не известен.
Прошу прощение, по поводу метода comlete написал по старинке. А вот цитата из документации:Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks will be deprecated in jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.
По поводу метода success, действительно как-то не понятно получилось. Суть в том. что лучше все таки использовать $.ajax, Как deffered object. И писать код вроде следующего:
$.when($.ajax(...)).done(...).fail(....).always(...)
По поводу post, я не согласен. Во первых все функции возвращают deffered object, у которых есть есть методы done,complete,fail(а error является устаревшим). Тип преходящих данных нужно указывать на стороне сервера отправляя правильный заголовок content-type:application/json jQuery cам поймет, как с ним работать(читаем документацию:The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string). ). Поэтому писать обработчик в sucess, не очень хорошо.
Пожалуй приведу, более верную конструкцию с замечаниями kashey.
  this.layout.setParentElement(parent.getChildElement(this));

Вообще говоря от нового API остались двоякие ощущения, с одной стороны некоторые вещи стали делаться проще и логичнее, а другие стали более запутанными. К примеру раньше свой элемент управление было создать гораздо проще. Да я понимаю, что теперь это стало более расширяемым и создаваемые нами объекты не отличаются от стандартных, но очень часто этого и не нужно.
Но скорость работы действительно увеличилась, да и появился новый функционал в стандартных объектах, которого так не хватало.
Что-то под хабркатом, ничего нету.
Стоит отметить, что в PHP 5.4 также стал доступен контекст $this в анонимной функции.
Для меня modx, одна из самых лучших CMS. Почти идеал, мне правда не приходилось делать на ней нагруженные проекты, но думаю что она справиться, кэширование из коробки работает просто замечательно.
На ней действительно, можно сделать сайт не написав ни одной строчки PHP(конечно, если вам не нужна какая-то не типичная задача).
Особенно нравиться система темизации, вы легко можете внедрить любой шаблон, документация просто супер.
Спасибо bezumkin, за хорошие статьи про эту CMS.
Нету возможности, его посетить. Но очень интересно было бы послушать.
А вы смотрели реализацию, jQuery live до 1.6 версии, и почему они рекомендуют использовать delegate. У вас как раз классическая реализация live.
А найти нужные элементы, это не так уже и долго. Посмотрите к примеру код gmail,yandex, там ребята почему-то не цепляют обработчик на весь документ.
А наш спор без тестов бесполезен.
Да я посмотрел, ваш код на сайте, действительно, он модульный и разбитый на объекты, и я вполне верю, что он хорошо масштабируемый.
А как интересно делаете замеры? Было очень интересно об это узнать.

Information

Rating
Does not participate
Registered
Activity