Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Шоу интуиция!

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
biperch
Отправлено: 19 Ноября, 2014 - 03:25:31
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




Всем доброго времени суток!

Ниже приведенный код выводит блок-форму для отправки комментария и позволяет загружать картинки в комментарий.
Все это он делает и это замечательно.
Но появилась бага которую не могу отловить уже 3 дня. После первой отправки комментария с картинкой, в остальных таких же формах в моделе тоже появляется запись о вложенной картинке.

вычислил что во всех остальных формах появляется запись о картинке сразу после срабатывания события fileuploaddone, как оно туда попадает ума не приложу.
Возможно ли такое, что это событие происходит для всех input[type=file] или в этом повинно то ,что у них имена одинаковые?

Используется backbone+marionerre


CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. UploadInit : function(){
  3.                 if (this.file_init) {
  4.                     return;
  5.                 }else{
  6.                     this.file_init = false;
  7.                 }
  8.                 var that = this;
  9.  
  10.  
  11.                 this.$('.f-comment-add-file').fileupload({
  12.                         url: '/upload_image/upload',
  13.                         dataType: 'json',
  14.                         autoUpload: false,
  15.                         dropZone: $('<div>'),  // Default: $(document)
  16.                         maxFileSize: 5000000, // 5 MB
  17.                         disableImageResize: /Android(?!.*Chrome)|Opera/.test(window.navigator.userAgent),
  18.                         previewMaxWidth: 100,
  19.                         previewMaxHeight: 100,
  20.                         previewCrop: true,
  21.                         acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i
  22.  
  23.                     }).on('fileuploadadd', function (e, data) {
  24.  
  25.                         /*
  26.                          * защита от копипаста
  27.                          * Проверка что грузим реальную картинку
  28.                          * у реальной картинки есть поле name и оно не может быть пустым
  29.                          */
  30.                        
  31.                             if (typeof data.files[0].name == 'undefined'){
  32.                                 data.abort();
  33.                                 return;
  34.                             }
  35.  
  36.  
  37.                         if(that.image_count==2){
  38.                             data.abort();
  39.                             return;
  40.                         }else{
  41.                             that.image_count++;
  42.                             that.locking_upload_file();
  43.                         }
  44.  
  45.                         data.context = $('  <div class="img_post_preview">\n\
  46.                                                <span class="icon icon-mini-close f-close"></span>\n\
  47.                                                <div class="progress progress-striped active">\
  48.                                                    <div class="progress-bar" style="width: 0%;"></div>\
  49.                                                </div>\
  50.                                            </div>')
  51.                                     .appendTo(that.$el.find('.uploaded_image_preview-comment'));
  52.                         data.context.find('.f-close').data(data).on('click', function(){
  53.                             data.abort();
  54.                             data.context.remove();
  55.  
  56.                             that.image_count--;
  57.                             that.locking_upload_file();
  58.                         });
  59.  
  60.                         console.log(data);
  61.                         console.log(data.files);
  62.  
  63.                         that.blocksReInitialise();
  64.  
  65.                     }).on('fileuploaddone', function (e, data) {
  66.                         if(data.result.status==='error'){
  67.                             alert('Upload error');
  68.                         }
  69.                         else{
  70.                             var attachments = that.model.get('attachments');
  71.  
  72.                             attachments.push({type:'image',img_id: data.result.img_id});
  73.                             that.model.set('attachments', attachments);
  74.  
  75.                             data.img_id = data.result.img_id;
  76.                             // удалили прогрес бар
  77.                             data.context.find('.progress').remove();
  78.                             // убрали у кнопки сотменить загруску событие клик которое вызывало аборт
  79.                             data.context.find('.f-close').off('click')
  80.                                 // событие удаление из сообщения картинки которая уже была загружена
  81.                                 .on('click', function(){
  82.                                     // удаляем из модели атачи
  83.                                     console.log('удаляем на сервере');
  84.                                     var attachments = that.model.get('attachments');
  85.                                     for(var i = 0; i<attachments.length; i++){
  86.                                         if(attachments[i].img_id == data.img_id){
  87.                                             attachments.splice(i ,1); // удаляем элемент
  88.                                             that.model.set('attachments', attachments);
  89.  
  90.                                             that.image_count--;
  91.                                             that.locking_upload_file();
  92.                                         }
  93.                                     }
  94.                                     data.context.remove();
  95.                                     data.context = null;
  96.  
  97.                                     that.blocksReInitialise();
  98.  
  99.                                 });
  100.  
  101.                             console.log('Отправка успешна', data);
  102.                         }
  103.                     }).on('fileuploadprocessalways', function (e, data) {
  104.                         var index = data.index,
  105.                             file = data.files[index],
  106.                             node = $(data.context);
  107.                         if (file.preview) {
  108.                             node.append(file.preview);
  109.                         }
  110.                         if (file.error) {
  111.                             node.append($('<span class="text-danger"/>').text(file.error));
  112.                         }else{
  113.                             data.submit();
  114.                         }
  115.  
  116.  
  117.                     }).on('fileuploadprogress', function (e, data) {
  118.                         var progress = parseInt(data.loaded / data.total * 100, 10);
  119.                         data.context.find('.progress-bar').css(
  120.                             'width',
  121.                             progress + '%'
  122.                         );
  123.                     });
  124.             }
  125.  

Скачать файл: CommentsForm.js
Скачан раз: 56
 
 Top
biperch
Отправлено: 19 Ноября, 2014 - 22:39:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




Ну хоть какую нибудь версию!?
 
 Top
Viper
Отправлено: 19 Ноября, 2014 - 23:52:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




biperch пишет:
вычислил что во всех остальных формах появляется запись о картинке сразу после срабатывания события fileuploaddone, как оно туда попадает ума не приложу.
чисто теоретически могу предположить, что попадает оно после успешной загрузки файла. КО

Что есть this в методе UploadInit?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
biperch
Отправлено: 20 Ноября, 2014 - 00:49:18
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




Viper пишет:
biperch пишет:
вычислил что во всех остальных формах появляется запись о картинке сразу после срабатывания события fileuploaddone, как оно туда попадает ума не приложу.
чисто теоретически могу предположить, что попадает оно после успешной загрузки файла. КО

то что после загрузки, это да, то что в текущую модель записывает номер картинки это тоже хорошо, но как этот номер картинки попадает в остальные модели....

Viper пишет:

Что есть this в методе UploadInit?

this - Экземпляр класса comments.CommentForm

по сути объявляем модель, вид, отрисовали
var comment_empty_model = new MyApp.comments.CommentModel({entity_id : this.model.get('id'),
entity_type : this.model.get('entity_type')}),
comment_form_view = new MyApp.comments.CommentForm({model:comment_empty_model});
comment_layout.comments_form.show(comment_form_view);

Во вложении полный код вида, UploadInit выполняется в контексте своего вида, для верняка запускал через call эффект тот же был, так что оставил так как сейчас..
 
 Top
Viper
Отправлено: 20 Ноября, 2014 - 09:04:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Меня настораживает that.model.set('attachments', attachments); который у вас чуть ниже ещё и в цикле почему-то. Логично предположить, что в цикле для n-файлов, но а перед ним зачем?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
biperch
Отправлено: 20 Ноября, 2014 - 10:52:43
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




как только пришел ответ от сервера что картинка загружена, в модель записываю номер картинки.
Далее отменяю обработчик кнопки который абортирует загрузку и создаю новый обработчик на удаление картинки. а в цикле перебираю массив атачей и если нахожу совпадение то исключаю эту картинку, удаляю отображение превью, после массив атачей с исключенным элементом обратно записую в модель
 
 Top
Viper
Отправлено: 20 Ноября, 2014 - 16:46:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Точно. Не досмотрел.
Хм... В тупике Не понял


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
biperch
Отправлено: 20 Ноября, 2014 - 21:22:47
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




Viper пишет:
Точно. Не досмотрел.
Хм... В тупике Не понял

я тоже в тупике
 
 Top
biperch
Отправлено: 27 Ноября, 2014 - 01:54:49
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




И так, продолжаем викторину, решение не найдено((
 
 Top
DeepVarvar Супермодератор
Отправлено: 27 Ноября, 2014 - 09:09:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Создать два "разных" аплоада на одной странице и посмотреть как они между собой себя ведут.
Возможно где-то через прототип или профуканый указатель имеем то что имеем.
Может помочь изменение логики приложения на то, чтобы все модели пользовались одним загрузчиком, а не имели каждая свой.
 
 Top
Panoptik
Отправлено: 27 Ноября, 2014 - 11:05:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. this.$('.f-comment-add-file').fileupload({

вот это this.$('selector') разве так и должно быть? может нужно как-то обращаться к селектору $('.f-comment-add-file') в контексте его родителя, а то такое чувтсво что оно будет искать все такие элементы в ДОМ и применять действия независимо от того к какой модели оно относится


-----
Just do it
 
 Top
biperch
Отправлено: 27 Ноября, 2014 - 14:38:25
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




this.$('.f-comment-add-file').fileupload({

this - это "вид"

this.$('.f-comment-add-file').fileupload({ - поиск селектора в контексте вида

равносильно this.$el.find('.f-comment-add-file')
(Добавление)
Вот еще какой парадокс

отправляю в комменте картинку отправляю второй коммент в другой форме картинка там есть, что есть бага.
опять в первом отправляю картинку, во тором отправляю только текст уже картинки нету то есть повторно баг не происходит
 
 Top
biperch
Отправлено: 28 Ноября, 2014 - 21:26:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




новая инфа)))

после отправки первого коммента с картинкой.

подгружаем новые сообщения, для них динамически создаются форма комментов, после отправки коммента в вновь созданном сообщении картинка появляется.... следовательно запись о картинке записывается в прототип или что то вроди этого....
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB