2012-05-16 2 views
0

Ранее я задал вопрос о том, как я могу написать блок кода короче, я получил свой ответ, и я начал адаптировать его к моим обстоятельствам. Но я столкнулся с небольшой проблемой, вот код, я бег:для цикла, не выполняющего код при выполнении условия

var default_cluster_options = { 
    limits : [ { min: 1224, items: 8 }, { min: 954, items: 6 }, { min: 624, items: 4 }, { min: 0, items: 2 } ] 
}; 

var default_plugin_options = { 
    containerID : "", 
    first  : false, 
    previous : false, 
    next  : false, 
    last  : false, 
    startPage : 1, 
    perPage  : 1, 
    midRange : 6, 
    startRange : 1, 
    endRange : 1, 
    keyBrowse : false, 
    scrollBrowse: false, 
    pause  : 0, 
    clickStop : true, 
    delay  : 50, 
    direction : "auto", 
    animation : "fadeIn", 
    links  : "title", 
    fallback : 1000, 
    minHeight : true, 
    callback : function(pages, items) {} 
}; 

var Cluster = function(cluster_options, plugin_options) { 
    this.options = $.extend({}, default_cluster_options, cluster_options); 
    this.plugin_options = $.extend({}, default_plugin_options, plugin_options); 
    this.limits = this.options.limits; 
    this.inititate_shop(); 
}; 

Cluster.prototype.initiate_plugin = function(plugin_navigation, plugin_options) { 
    var options = $.extend({}, this.plugin_options, plugin_options); 
    return $(plugin_navigation).jPages(options); 
}; 

Cluster.prototype.inititate_shop = function() { 
    for (var i = 0; this.viewport_width <= this.limits[i].min; i++) { 
     log(this.limits[i].min); 
     log(this.viewport_width); 
     this.initiate_plugin('.shop-items-navigation', { 
      containerID : "shop-items-wrapper", 
      perPage  : this.limits[i].items, 
      midRange : 8, 
      animation : "fadeIn", 
      links  : "blank", 
      keyBrowse : true, 
      callback : function(pages) { 
       log(pages.current); 
      } 
     }); 
    } 
}; 

var cluster = new Cluster(); 

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

И моей проблемой будет петля for() внутри объекта Cluster.prototype.inititate_shop. Я не вижу ошибки в консоли, но когда я попытался увидеть, работает ли другой цикл в переменной this.limits (которая представляет собой массив из 4 объектов), это было сделано.

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

+0

Вы проверили состояние - каковы значения viewport_width и this.limits [я] .min? – Dave

+0

О, извините, 'this.viewport_width' - это ширина окна. Пределы устанавливаются в этом массиве внутри объекта. И да, я протестировал его, но ничего не произошло. – Roland

+0

Какова ценность this.viewport_width - номер? – Dave

ответ

1

Из приведенных выше замечаний - проблема в том, что ваше высокая мин значение в списке лимитов является 1224, но ваша ширина окна просмотра 1366 так:

this.viewport_width <= this.limits[i].min; 

никогда не оценивается как истина, и код в цикле является никогда не исполнялся.

EDIT 2

Что если вы вспыхнуть заявление, что делает проверку:

Cluster.prototype.inititate_shop = function() { 
for (var i = 0; i < this.limits.length; i++) { 
    if (this.viewport_width >= this.limits[i].min){ 
     log(this.limits[i].min); 
     log(this.viewport_width); 
     this.initiate_plugin('.shop-items-navigation', { 
      containerID : "shop-items-wrapper", 
      perPage  : this.limits[i].items, 
      midRange : 8, 
      animation : "fadeIn", 
      links  : "blank", 
      keyBrowse : true, 
      callback : function(pages) { 
       log(pages.current); 
      } 
     }); 
     return false; // to break out of loop 
     } 
    } 
}; 
+0

Хорошо, но как это можно зафиксировать, потому что это может произойти чаще, чем наличие небольшого устройства, такого как 980px. Есть ли обходной путь для этого? – Roland

+0

Да, моя первая мысль была такова, но это немного странно :) Некоторое предложение о том, как переписать логику? Мне нравится идея цикла через массив или объект, а не с if() ... else if() 'statement :) – Roland

+1

Измените направление сравнения, чтобы вместо поиска ширины порта меньше минуты, вы ищете более крупные значения, поэтому конечная запись в вашем лимитном массиве будет тогда по умолчанию – Dave