Я работаю с диаграммами Google и испытываю некоторые недоразумения.setOnLoadCallback не работает в цикле
Чтобы быть коротким, у меня есть много диаграмм для рисования, и вместо их перечисления я хотел бы создать цикл. Но когда я конвертирую «список вызовов» в цикл for..in, только последний элемент в массиве, похоже, «работает».
Здесь вы можете увидеть объект, называемый «allData», который содержит много данных и функцию для вызова при запуске «OnLoad».
for (var value in allData) {
google.charts.setOnLoadCallback(function() { (allData[value]['function'])(allData[value]) });
};
//google.charts.setOnLoadCallback(function() { (allData['ActionsBar']['function'])(allData['ActionsBar']) });
// google.charts.setOnLoadCallback(function() { (allData['OtherBar']['function'])(allData['OtherBar']) });
// google.charts.setOnLoadCallback(function() { (allData['ThirdBar']['function'])(allData['ThirdBar']) });
Если я раскомментирую последние 3 строки, все будет хорошо. Я читал, что он, похоже, знал проблемы с диаграммами и циклами Google, но не смог найти именно этот случай. Есть идеи ?
Здравствуйте, я не думаю да. То, что вы мне сказали, делается с помощью функции лямбда: 'function() {(allData [значение] ['function']) (allData [значение])}' (Плюс ваш код не так, как вы «вызовите» myCallBackFunction, где вы должны просто передать его как параметр). Или, может быть, я не понял, что вы имели в виду. –
Только последний цикл работает, потому что каждый раз, когда вы вызываете .setOnLoadCallback, он удаляет предыдущий – grogro
Вы уверены? Почему он не стирает предыдущий, когда я делаю последовательные звонки? И есть ли способ исправить это, вы думаете? –