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 :: IE и наследование

 PHP.SU

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


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

> Описание: Проблема с наследованием в IE
froosty
Отправлено: 04 Ноября, 2013 - 20:59:07
Post Id


Новичок


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


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




Доброго времени суток. Есть 2 скрипта.

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. (function($){
  3.     /**
  4.      * Базовый класс для работы с Аякс запросами
  5.      * В него включено также отображение загрузчика, сообщения об ошибка и "успехе"
  6.      * @param object params {
  7.      *                          ajax_path: '/admin/ajax/' - путь к аякс обработчику. Должен заканчиваться обязательно слешем,
  8.      *                          ...
  9.      *                      }
  10.      */
  11.     $.fn.BaseAjax = function(params){
  12.         var me = this,
  13.             default_params = {
  14.                 ajax_path : ''
  15.             };
  16.  
  17.         me.params = $.extend(default_params, params);
  18.  
  19.         /**
  20.          * Функция посылки запроса
  21.          * @param  string method           имя метода в обработчике. Пример: method: 'get_something' (запрос пошлется на '/admin/ajax/get_something')
  22.          * @param  object params           объект с отсылаемыми параметрами
  23.          * @param  function success_function функция обработчик success
  24.          */
  25.         me.send_query = function(method, params, success_function){
  26.             $.ajax({
  27.                 url: me.params.ajax_path+method,
  28.                 type: 'POST',
  29.                 dataType: 'json',
  30.                 data: params,
  31.                 success: success_function
  32.             });
  33.         };
  34.  
  35.         me.base_init = function(){
  36.             me.put_loader();
  37.             me.put_message_block();
  38.         };
  39.  
  40.  
  41.         /**
  42.          * Функция добавляющая на страницу лоадер, если его нету.
  43.          */
  44.         me.put_loader = function(){
  45.             if ($('.loader').length==0){
  46.                 var loader = '<div class="loader">'+
  47.                                 '<div class="loader_image">'+
  48.                                 '</div>'+
  49.                             '</div>';
  50.                 $('body').append(loader);
  51.             }
  52.             me.params.loader = $('.loader');
  53.         };
  54.  
  55.        
  56.         me.show_loader = function(){
  57.             me.set_loader_height();
  58.             $(me.params.loader).show();
  59.         };
  60.  
  61.  
  62.         me.hide_loader = function(){
  63.             $(me.params.loader).hide();
  64.         };
  65.  
  66.         me.set_loader_height = function(){
  67.             var height = document.height;
  68.             $(me.params.loader).css('height', height+'px');
  69.  
  70.             var width = 128,
  71.                 left = (document.width - width) / 2;
  72.  
  73.             $('.loader_image', me.params.loader).css('left', left+'px');
  74.  
  75.         };
  76.  
  77.  
  78.         /**
  79.          * Функция добавляющая на страницу блок сообщения если его нету
  80.          */
  81.         me.put_message_block = function(){
  82.             if ($('.ajax_message_block').length==0){
  83.                 var message_block = '<div class="ajax_message_block">'+
  84.                                   '</div>';
  85.                 $('body').append(message_block);
  86.             }
  87.  
  88.             me.params.message_block = $('.ajax_message_block');
  89.         };
  90.  
  91.         me.show_error = function(message){
  92.             $(me.params.message_block).removeClass('ajax_success_message').addClass('ajax_error_message');
  93.  
  94.             me.show_block(message);
  95.         };
  96.  
  97.         me.show_success = function(message){
  98.             $(me.params.message_block).removeClass('ajax_error_message').addClass('ajax_success_message');
  99.  
  100.             me.show_block(message);
  101.         };
  102.  
  103.         me.show_block = function(message){
  104.             $(me.params.message_block).html(message);
  105.             var left_value = (document.width-$(me.params.message_block).width())/2;
  106.             $(me.params.message_block).css({
  107.                 'left': left_value
  108.             });
  109.  
  110.             $(me.params.message_block).fadeIn(400, function(){
  111.                 setTimeout(function(){
  112.                     $(me.params.message_block).fadeOut(400);
  113.                 }, 2000);
  114.             });
  115.         };
  116.  
  117.         me.base_init();
  118.  
  119.         return this;
  120.     };
  121.  
  122. })(jQuery);
  123.  


И второй который наследуется от вышеуказанного

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. (function($){
  3.  
  4.     $.fn.ReviewsList = function(params){
  5.  
  6.         var me = this,
  7.             default_params = {
  8.                 page: 1,
  9.                 ajax_path: '/reviews/ajax/'
  10.             };
  11.  
  12.         this.__proto__ = new $.fn.BaseAjax;
  13.  
  14.         me.params = $.extend(me.params, default_params);
  15.         me.params = $.extend(me.params, params);
  16.  
  17.  
  18.         me.init = function(){
  19.             me.params.object_id = $(me).data('object-id');
  20.  
  21.             me.get_list();
  22.         };
  23.  
  24.  
  25.         me.bind_navigation = function(){
  26.             if ($('.pagination a', me).length>0){
  27.                 $('.pagination a', me).unbind('click');
  28.  
  29.                 $('.pagination a', me).click(function(e){
  30.                     e.preventDefault();
  31.  
  32.                     me.params.page = $(this).html();
  33.                     me.get_list();
  34.                 });
  35.             }
  36.  
  37.             if ($('.review_drop_down', me).length > 0){
  38.                 $('.review_drop_down', me).unbind('click');
  39.                 $('.review_drop_down', me).click(function(e){
  40.                     e.preventDefault();
  41.  
  42.                     $(this).parent().hide();
  43.                     $(this).parents('.review_container').find('.hidden_review_description').show();
  44.                     $(this).parents('.review_container').find('table.small_raiting_review').show();
  45.                 });
  46.             }
  47.         };
  48.  
  49.  
  50.         me.get_list = function(){
  51.             me.show_loader();
  52.             me.send_query('get_list', {
  53.                 page: me.params.page,
  54.                 object_id: me.params.object_id
  55.             }, function(result){
  56.                 me.hide_loader();
  57.  
  58.                 if (result==null){
  59.                     me.show_error('При послыке запроса произошла ошибка. Попробуйте обновить страницу');
  60.                     return;
  61.                 }
  62.  
  63.                 if (result.status==true){
  64.                     me.set_content(result.data);
  65.                     me.bind_navigation();
  66.                 }
  67.                 else{
  68.                     me.show_error(result.message);
  69.                 }
  70.             })
  71.         };
  72.  
  73.  
  74.         me.set_content = function(content){
  75.             $(me).html(content);
  76.         };
  77.  
  78.         me.init();
  79.     };
  80.  
  81. })(jQuery);
  82.  


В IE 8 при загрузке страницы возникает ошибка при вызове me.show_loader(); в функции me.get_list, и остальных унаследованных функций тоже. Такое впечатление, что просто не наследуется вообще. Подскажите пожалуйста в чем проблема ну и какое решение есть этой проблемы? Заранее спасибо.

p.s. код не идеальный, я понимаю Улыбка
 
 Top
nerv
Отправлено: 05 Ноября, 2013 - 22:00:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


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




CODE (javascript):
скопировать код в буфер обмена
  1. this.__proto__ = new $.fn.BaseAjax;

это не работает в IE8, поэтому и не наследуется

Попробуй так
CODE (javascript):
скопировать код в буфер обмена
  1. $.fn.ReviewsList = function(params){
  2.  
  3.     var me = Object.create($.fn.BaseAjax.prototype);
  4.  
  5.     // this.__proto__ = new $.fn.BaseAjax; - это не надо
  6.     // ... code
  7.  
  8.     return me;
  9. }

и если надо es5-shim подключи для старых браузеров

(Отредактировано автором: 05 Ноября, 2013 - 22:02:25)



-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 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