Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 04.09.2013, 23:21
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Shitbox2
О_о Никогда бы не подумал что кому-нибудь будет нужно
я и сам не подумал бы )

Пока не забыл, хочу тут мысль запостить по поводу отправки файлов через $rootScope. Сейчас у меня ситуация такая, директивы ловят файлы и отправляют их в корневой скоп (по твоему совету). Это правильно и удобно, но не позволит создать два экземпляра загрузчика (независимых). Выход - каналы передачи данных. На примере:
<html>
    <head>
        <script>
            app.run(function( $rootScope ) {
                
                $rootScope.$on( 'channel:name1', function() {
                    // some code
                });

                $rootScope.$on( 'channel:name2', function() {
                    // some code
                });
                
            });
        </script>
    </head>

    <div>
        <div ng-file-drop channel="channel:name1"></div>
    </div>
    
    <div>
        <div ng-file-drop channel="channel:name2"></div>
    </div>
</html>

америку я, конечно, не открыл, но вдруг кому пригодится

Сообщение от Shitbox2
Во-первых загрузка одного и того же файла по разным URL в пределах одного сервера — плохое решение
не соглашусь

Сообщение от Shitbox2
У меня каждой директиве
oi-file="options"
можно задать свой объект с настройками
теперь у меня тоже (предыдущий релиз) )

Сообщение от Shitbox2
Проблема в том, что при манипуляциях с моделью лезут ошибки именно из-за того, что в модели оказывается ссылка на xhr, а в xhr записана ссылка на модель (циклическая ссылка).
теперь понял откуда у меня ошибки лезли

Сообщение от Shitbox2
Случайно нигде не видел, чтобы она использовалась))) Более того, в версии 1.2 и из своего кода смог эти проверки выкинуть. Стало и без них работать. (был баг, когда http-запросы копились и уходили не сразу, если цикл не запустить)
тоже буду курить в этом направлении, когда время будет. Спасибо
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #52 (permalink)  
Старый 29.09.2013, 00:55
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Не взяли меня фронтендщиком в Яндекс. Ну и ладно, больше времени на открытые проекты останется)

Обновил загрузчик: https://github.com/tamtakoe/oi.file
Переделал загрузку, общий прогресс и проч. Теперь файлы загружаются по-очереди. Для этого пришлось запилить отдельную очередь для загружаемых файлов. Вынеся в эту же очередь ссылки на xhr, избавился от циклических ссылок, что позволило сделать отмену загрузки :-)

Не стал засорять область видимости, поэтому туда копируется только один объект — очередь. Которая содержит как список загружаемых фалов, так и значения общего прогресса, кол-во загруженных байт и т.п.

Теперь новая версия работает только в Ангуляре 1.2. Для старых версий сделал отдельню версию. Там совсем небольшие отличия.

Последний раз редактировалось Shitbox2, 29.09.2013 в 01:02.
Ответить с цитированием
  #53 (permalink)  
Старый 01.10.2013, 20:03
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Shitbox2, не грусти, все будет хорошо

Сообщение от Shitbox2
Вынеся в эту же очередь ссылки на xhr, избавился от циклических ссылок, что позволило сделать отмену загрузки :-)
немного спогодя спизжу позаимствую у тебя

Сообщение от Shitbox2
Теперь файлы загружаются по-очереди
все-таки очередь ) Кстати, https://github.com/nervgh/angular-file-upload/issues/5

Сообщение от Shitbox2
Не стал засорять область видимости, поэтому туда копируется только один объект — очередь
а чем засорял до этого? О_о

Цитата:
queue.lenght
https://github.com/tamtakoe/oi.file
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 01.10.2013 в 20:10.
Ответить с цитированием
  #54 (permalink)  
Старый 02.10.2013, 19:52
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Сообщение от nerv_
а чем засорял до этого? О_о
Полями progressAll, loadedAll, например. Тут логика такая: В каждый элемент модели (связанный с файлом) мы добавляем кучу полей:
fileName
fileThumb
fileSize
fileLoaded
fileProgress
fileUploading

Это оправдано, т.к. половина из них могут и так содержаться и быть полезными в модели (fileName, fileThumb, fileSize). Остальные просто удаляются после окончания загрузки.

С областью видимости всё не так. Сам по себе контроллер ни с какой моделью не связан и добавляя в область видимости кучу полей мы ее сильно замусориваем. Поэтому тут лучший вариант добавить один параметр — модель очереди загрузки и уже с ней работать.

Цитата:
все-таки очередь )
Да. Сравнивал скорость. По сути, одна и та же. Только с параллельной загрузкой больше гемора, когда нужно общий прогресс вычислять Еще, если оборвется соединение, то обломается загрузка всех загружающихся файлов. В очереди потеряется только один файл.

Не очень нравится как реализована у меня очередь... С deferred объектами... Думал, этот паттерн поддерживает поочередное выполнение процессов. Похоже, что нет...
Ответить с цитированием
  #55 (permalink)  
Старый 02.10.2013, 23:35
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Shitbox2
Не очень нравится как реализована у меня очередь... С deferred объектами...
вот мы и пришли к событиям

Сообщение от Shitbox2
Поэтому тут лучший вариант добавить один параметр — модель очереди загрузки и уже с ней работать.
я бы все-таки добавлял загрузчик, внутри которого очередь и все остальное

Сообщение от Shitbox2
Полями progressAll, loadedAll, например. Тут логика такая: В каждый элемент модели (связанный с файлом) мы добавляем кучу полей:
Сообщение от Shitbox2
Полями progressAll, loadedAll, например. Тут логика такая: В каждый элемент модели (связанный с файлом) мы добавляем кучу полей:
fileName
fileThumb
fileSize
fileLoaded
fileProgress
fileUploading
file.name
file.thumb
file.size
...



Еще у меня есть мысль позаимствовать функции transformResponse для разбора ответа сервера. Что думаешь на этот счет?
Кажется, здесь лежат
$http.defaults.transformResponse
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 03.10.2013 в 00:13.
Ответить с цитированием
  #56 (permalink)  
Старый 03.10.2013, 06:17
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Сообщение от nerv_ Посмотреть сообщение
вот мы и пришли к событиям
Совсем бы не хотелось. События, как мне кажется, это такая штука, которая должна быть связана только с бизнес-логикой, т.е. в основной программе возникают и там же ловятся. Если же каждый плагин будет плодить свои события, можно очень быстро замусорить глобальную область видимости. Если же события будут локальными... Ну и что это за события такие? :-)
----
ИМХО, события нужны для асинхронных вещей: пользователь нажал что-то, кто-то написал в чате и т.п. (мы не создаем запрос). Синхронные вещи — это удел обещаний: запрос к серверу, загрузка файлов (мы создали запрос и ожидаем ответ)

Сообщение от nerv_ Посмотреть сообщение
я бы все-таки добавлял загрузчик, внутри которого очередь и все остальное
Типа твоего uploader? Когда дело до оптимизации дойдет, скорее всего придется общий код в прототип выносить и что-то такое делать... Но не понимаю, зачем, вообще, нужно выносить очередь? Сперва думал вынести в область видимости только информацию об общем прогрессе, а очередь вынес скорее из-за свойства queue.length :-). Ну и типа можно полностью перехватить управление и пересортировать ее, чтобы, например сначала загружались самые маленькие файлы или, вообще, компоновать все мелкие файлы и загружать их в одном запросе... Но это такая чушь, что без нее будет только лучше.

Сообщение от nerv_ Посмотреть сообщение
Еще у меня есть мысль позаимствовать функции transformResponse для разбора ответа сервера. Что думаешь на этот счет?
Эту, как понимаю
function(data) {
  if (isString(data)) {
    // strip json vulnerability protection prefix
    data = data.replace(PROTECTION_PREFIX, '');
    if (JSON_START.test(data) && JSON_END.test(data))
      data = fromJson(data);
    }
    return data;
  }
}

У меня подобным занимается функция-обертка над angular.fromJson
function _parseJSON (data) {
  if (typeof data !== 'object') {
    try {
      return angular.fromJson(data);
    } catch (e) {
      return false;
    }
  }
  return data;
  }
}

В принципе, идея здравая. Правда, не знаю, на сколько оправданы все их проверки. И в моем случае я парсю, только если этого не сделал $http, т.е. и так почти всегда использую дефолтный transformResponse.

Последний раз редактировалось Shitbox2, 03.10.2013 в 06:19.
Ответить с цитированием
  #57 (permalink)  
Старый 03.10.2013, 23:39
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Shitbox2
События, как мне кажется
не правильно тебе кажется )

Сообщение от Shitbox2
Если же каждый плагин будет плодить свои события
многие жуквери плагины плодят события

Сообщение от Shitbox2
Если же каждый плагин будет плодить свои события, можно очень быстро замусорить глобальную область видимости
1. как можно замусорить область видимости событиями?
2.
глобальный_скоп {
    scope {
        2. тут поймали и остановили (чтобы не дошло до глобального скопа)
        scope: {
             1. тут запулили событие вверх
        }
    }
}


Сообщение от Shitbox2
У меня подобным занимается функция
функции. Их может быть много (согласно ангуляру). Опять-таки, зачем писать свою/свои, если можно воспользоваться тем, что есть (моя логика).
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #58 (permalink)  
Старый 05.10.2013, 10:53
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Цитата:
многие жуквери плагины плодят события
Думаешь, это идеалогически верный подход? Когда мы не контролируем имена событий, генерируемых плагином и можем случайно получить два события с одинаковым именем из разных источников? Обычно события в жиквери-плагинах имеют вид колбеков (как у меня сделано), либо ограничены только областью видимости плагина и не распространяются вверх $('#pluginTag').on(...)

Цитата:
2. тут поймали и остановили
Интересно как это делается? Кажется в Ангуляре нет средств для остановки событий, т.е. придется свой костыль писать.

Цитата:
Опять-таки, зачем писать свою/свои, если можно воспользоваться тем, что есть (моя логика).
Кто ж спорит?)) Пока не представляю как получить ссылку на встроенную функцию с гарантией, что ее никто не переопределит. Второй вопрос, нужны ли такие навороты для загрузки файлов? Там-то универсальная функция. Может быть для загрузки такая и не нужна.
Ответить с цитированием
  #59 (permalink)  
Старый 06.10.2013, 03:27
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Shitbox2
Думаешь, это идеалогически верный подход?
зависит от обстоятельств

Сообщение от Shitbox2
Когда мы не контролируем имена событий, генерируемых плагином и можем случайно получить два события с одинаковым именем из разных источников?
чего? Если мы их сами генерируем, то почему мы "их не контролируем"?

Сообщение от Shitbox2
Обычно события в жиквери-плагинах имеют вид колбеков (как у меня сделано), либо ограничены только областью видимости плагина и не распространяются вверх $('#pluginTag').on(...)
1. коллбек - это коллбек
2. событие - это событие
что мешает сделать пространство имен для событий? Мне, кстати, надо добавить

Сообщение от Shitbox2
Интересно как это делается? Кажется в Ангуляре нет средств для остановки событий, т.е. придется свой костыль писать.
event.stopPropagation();


Сообщение от Shitbox2
Пока не представляю как получить ссылку на встроенную функцию с гарантией, что ее никто не переопределит.
1. функции
2. зачем на одну, если можно на массив функций? (например)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #60 (permalink)  
Старый 07.10.2013, 12:44
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Цитата:
Если мы их сами генерируем, то почему мы "их не контролируем"?
Они генерируются в недрах плагина, так что кроме тебя их никто не контролирует :-)

Цитата:
1. коллбек - это коллбек
2. событие - это событие
Любое событие начинается колбеком и заканчивается колбеком)

Цитата:
event.stopPropagation();
Я невнимательный) Тем не менее, тут палка о двух концах. Вызов функции в $on вызывает цикл дайджест, и он будет вызываться даже для тех событий, которые нам не нужны (мы их просто ловим, чтобы остановить)

Цитата:
1. функции
2. зачем на одну, если можно на массив функций? (например)
Можно тут подробнее, как бы ты это сделал?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
drag & drop, mouseup cyber Events/DOM/Window 108 02.07.2012 00:31
drag & drop , html 5 cyber Events/DOM/Window 1 30.06.2012 15:16
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11
Отмена drag and drop браузера l-liava-l Элементы интерфейса 0 02.04.2012 13:53
Как отлаживать события? Или как сделать трассировку вызовов функций? gennad Events/DOM/Window 1 18.08.2010 13:21