доступ к другим значениям в массиве в сценарии кофе в цикле (framer.js)

Привет, я новичок в javascript и CoffeeScript, поэтому сейчас я работаю над прототипом и одновременно изучаю язык.

Следующий блок кода делает почти то, что я хочу, за исключением одной важной вещи. Любая помощь будет принята с благодарностью

categories.forEach (cat,i) ->
    mainCat= categ[i] = new Layer
     width:185
     height:77
     parent:catSelect.content
     y:13
     x:205*i+20
     image:categories[i]
   categ[i].states.add
    off:
        image: categories[i]
    on:
        image: altCat[i]
   categ[i].on Events.Click, ->
    categ[i].states.next("on","off")

    if categ[i].states.current is "on"
        print "true"

Здесь у меня есть цикл для создания кнопок категорий (mainCat), которые имеют 2 состояния с отдельными массивами прикрепленных изображений (categories[] и altCat[]).

Я поместил этот цикл в массив, так что теперь, когда я щелкаю категорию, я могу проверить ее состояние, используя категорию [i], но это почти то, где мои ограничения.

Прямо сейчас это в основном рассматривает объекты в моем массиве categ[] как множественный выбор, тогда как я хочу, чтобы только один объект в массиве находился в состоянии «включено» за раз, и, как только он находится в состоянии «включено», он должен отображать определенную строку карточек, сохраняя при этом другие строки скрытыми в другом массиве (назовем его карточками []), расположенном в отдельном слое/деле.

то есть что-то вроде:

  if categ[!=i].states.current is "on"
   categ[!=i].states.switch("off")
   cardsRow[!=i].opacity=0
   cardsRow[i].opacity=1

Заранее спасибо!


person user6880664    schedule 26.09.2016    source источник
comment
Не могли бы вы опубликовать больше контекста для кода?   -  person vievievie    schedule 26.09.2016


Ответы (1)


Вы должны пройтись по всем объектам в categ, а затем проверить, совпадают ли они со слоем, на котором щелкнули, чтобы включить или выключить их.

То же самое верно для установки непрозрачности для слоя в другом массиве, но тогда вы должны использовать индекс цикла, чтобы искать слой вверх:

categ[i].on Events.Click, ->
    for l, index in categ
        if categ[i] == l
            l.states.switch("on")
            cards[index].opacity = 1
        else
            l.states.switch("off")
            cards[index].opacity = 0

Полный прототип с этим в работе можно найти здесь: http://share.framerjs.com/2yg7ix83yv1l/ Я заменил изображения фоновыми цветами, чтобы сделать слои видимыми.

person Niels    schedule 26.09.2016
comment
Вы, сэр, ЛЕГЕНДА. Прекрасно работает - person user6880664; 27.09.2016