2016-11-10 7 views
0

Я создаю свой первый плагин и имею некоторые проблемы. Я определяю пару глобальных переменных: значения по умолчанию и параметры. Я следую шаблону для такого плагина:опции variable undefined

(function ($) { 
    var defaults; 
    var options; 

    $.fn.button_carousel = function(options){ 
    console.debug("initializing button carousel"); 

    defaults = { 
     days_in_month: 0, 
     starting_day: 0, 
     days_with_appointments: null, 
     btnAppointmentFontColor: "#556b2f"   
    }; 



    options = $.extend({}, defaults, options); 

    console.debug("options: days_in_month: " + options.days_in_month + 
       "options: staring_day: " + options.starting_day + 
       "options: days_with_appointments: " + options.days_with_appointments); 
    ... 

    HighlightDays(); 

return this.each(function(){ 
    console.log(options); 
    });  
}; 

function HighlightDays() 
{ 
    if(options.days_with_appointments != undefined && options.days_with_appointments != null) 
    { 
     ... 
    } 
} 
}(jQuery)); 

Ознакомьтесь с отладчиком. Он печатает значения каждого свойства, как ожидалось. Тем не менее, когда я вызываю функцию HightlightDays(), условие оператора if вызывает ошибку, указывающую опцию переменной undefined. Как это может быть? Я объявляю ее глобальной переменной, поэтому ее можно получить везде. Пожалуйста, объясни.

ответ

0

Однако, когда я вызываю функцию HightlightDays(), состояние если оператор подбрасывает ошибку, указав параметры переменной не определено. Как это может быть? Я объявляю его глобальным, поэтому он может быть доступен везде.

options является undefined. options определяется в пределах объема экземпляра $.fn.button_carousel как $.extend({}, defaults, options) при присвоении идентификатора options, когда вызывается $.fn.button_carousel().

Вы можете передать options в HighlightDays()

HighlightDays(options) 

plnkr http://plnkr.co/edit/tqwIzaqin0HFHweE9h41?p=preview

+0

@Alan См. Обновленное сообщение. – guest271314

0

добавить в гостевой ответ, если вы склонны использовать его в дальнейшем в своих функциях вы тоже можете это сделать, как window.options, так что вы можете использовать его в любом месте. Область не ограничивается одной функцией.