2015-08-16 2 views
-1

Я новичок в JavaScript, и я пытаюсь сопоставить кнопки и светодиоды моего контроллера для приложения mixxx. Это объект, массив? var отсутствует.Javascript ERROR, undefined, а не объект

BehringerCMDMM1.leds = [ 
    // Master 
    { "shiftButton" : 0x12 }, 
    // Deck 1 
    { "sync" : 0x30 }, 
    // Deck 2 
    { "sync" : 0x33 } 
]; 

У меня есть ошибка здесь,

BehringerCMDMM1.shiftButton = function (channel, control, value, status, group) { 
// Note that there is no 'if (value)' here so this executes both when the shift button is pressed and when it is released. 
// Therefore, BehringerCMDMM1.shift will only be true while the shift button is held down 
var deck = BehringerCMDMM1.groupToDeck(group); 
BehringerCMDMM1.shift = !BehringerCMDMM1.shift // '!' inverts the value of a boolean (true/false) variable 
BehringerCMDMM1.setLED(BehringerCMDMM1.leds[deck]["shiftButton"], BehringerCMDMM1.shift); 

}

о "shiftButton", как определено.

также у меня есть эта функция

BehringerCMDMM1.setLED = function(value, status) { 

status = status ? 0x7F : 0x00; 
midi.sendShortMsg(0x94, value, status); 

}

Это из файла JavaScript я нашел в Интернете, созданный для другого контроллера. Итак, я пытаюсь понять, как мне настроить мой.

+0

Неопределенное не является объектом, как правило, означает, что некоторая функция возвращает неопределенное – Downgoat

+0

или он пытается выполнить функцию, которая на самом деле не существует, как и 'obj.aslkdjf()' – jcollum

ответ

3

BehringerCMDMM1.leds - это массив объектов. Внутри этого массива элемент с индексом 0 является объектом, который имеет свойство shiftButton. Таким образом, единственный способ, чтобы получить значение 0x12 в вашем примере, чтобы сделать это:

BehringerCMDMM1.leds[0]['shiftButton']

Так что, когда этот код выполняется ...

var deck = BehringerCMDMM1.groupToDeck(group);

... значение deck, вероятно, что-то другое, кроме 0, и вы получаете доступ к одному из объектов sync в массиве BehringerCMDMM1.leds. Например, если значение deck было 1, то это ...

BehringerCMDMM1.leds[deck]['shiftButton']

... будет undefined потому, что вы эффективно делать это:

BehringerCMDMM1.leds[1]['shiftButton']

1

Ok,

Я новичок в JavaScript, и я пытаюсь сопоставить кнопки и светодиоды контроллера для приложения mixxx. Это объект, массив?

У вас есть массив объектов.

var отсутствует.

Вы должны проверить, что находится внутри переменной палубы yout. Попробуйте это:

console.log(deck); 
if (deck in BehringerCMDMM1.leds) { 
    BehringerCMDMM1.setLED(BehringerCMDMM1.leds[deck]["shiftButton"], BehringerCMDMM1.shift); 
} else { 
    console.log("Index: "+deck+" doesn't exist"); 
} 
+0

Если вар колоде строка, возможно, вам следует перестроить код на что-то вроде этого: BehringerCMDMM1.leds = { "Master": {"shiftButton": 0x12}, "Deck1": {"sync": 0x30}, "Deck2": {"sync": 0x33} }; –

Смежные вопросы