Проблема определения объема Javascript с использованием JQuery Boilerplate
Я использую JQuery Boilerplate для написания моего первого плагина JQuery - адаптивной карусели. Я использую другой плагин (SSM -http://www.simplestatemanager.com/) для создания состояний для каждого вида устройства. Таким образом, на мобильных устройствах будет работать функция A, на планшетах - функция B, на настольных компьютерах - функция C и т. Д.
Для каждого состояния, созданного SSM, можно добавить соответствующую функцию обратного вызова onEnter, и ямы добавили 3 подходящие функции для запуска, когда это произойдет. Как видно из приведенного ниже кода, функция onEnterDesktop запускается на настольных устройствах. Затем я пытаюсь запустить еще одну функцию внутри этого метода createCarousel (), но получаю сообщение об ошибке "createCarousel не определен ".
Я полагаю, что это из-за проблемы с областью видимости, и браузер можетнайти createCarousel внутри функции onEnterDesktop. Как я могу это исправить?
Любая помощь будет отличной. Вот's код для моего плагина:
;(function ( $, window, document, undefined ) {
// Create the defaults once
var pluginName = "dcResponsiveCarousel",
defaults = {
propertyName: "value"
};
function Plugin( element, options ) {
this.element = element;
this.$element = $(element);
this.options = $.extend( {}, defaults, options) ;
this._defaults = defaults;
this._name = pluginName;
this.init();
}
Plugin.prototype = {
init: function() {
ssm.addStates([
{
id: 'mobile',
maxWidth: 767,
onEnter: this.onEnterMobile
},
{
id: 'tablet',
maxWidth: 991,
minWidth: 768,
onEnter: this.onEnterTablet
},
{
id: 'desktop',
minWidth: 992,
onEnter: this.onEnterDesktop
}
]);
ssm.ready();
},
onEnterMobile: function (){
console.log("You've entered mobile screen dimension territory");
var itemsPerPage = 1;
console.log(itemsPerPage);
},
onEnterTablet: function (){
console.log("You've entered tablet screen dimension territory");
var itemsPerPage = 2;
console.log(itemsPerPage);
},
onEnterDesktop: function (){
console.log("You've entered desktop screen dimension territory");
var itemsPerPage = 3;
createCarousel();
},
createCarousel: function (){
var $carouselItems = this.$element.children(".item"),
$carouselItemsLength = $carouselItems.length,
$carouselItemsWidth = 0;
for (var i = 0; i < $carouselItemsLength; i++) {
$carouselItemsWidth = $carouselItemsWidth + $carouselItems.eq(i).outerWidth();
};
console.log($carouselItemsWidth);
this.$element
}
};
$.fn[pluginName] = function ( options ) {
return this.each(function () {
if (!$.data(this, "plugin_" + pluginName)) {
$.data(this, "plugin_" + pluginName,
new Plugin( this, options ));
}
});
};
})( jQuery, window, document );