Как передать данные из Flash в CourseLab
Наверное вопрос, которые рано или поздно задают 90% разработчиков в среде CourseLab. На клиентском портале этот вопрос поднимался, и даже есть решение, я дабы упростить задачу расскажу, как это сделать на примере (пример выдумывал на ходу, но что то такое подобное встречается в реальной жизни разработчика).
Пусть задача будет такая: во Flash пользователь должен выбрать один из предметов (понятно, что это можно сделать и в CL, но я не большой специалист во Flash, поэтому показываю простой пример). Например определить, чем чаще должен пользоваться менеджер по продажам. А CourseLab должен дать обратную связь (то ли он выбрал и прокомментировать).
1) CourseLab
- создаем курс,
- создаем цель (в моем примере цель “с1” максимальное значение 1, минимальное 0),
- вставляем скрипт в файл module.js (в папке с модулем).
function recieveFromFlash (xyz)
{
SetObjectiveScore("c1", "flash", "replace", xyz);
}Примечание: если вместо replace поставить sum, то вместо перезаписи цели этот скрипт суммирует значения с текущим.
2) Flash
- на “чувствительные” объекты (в нашем случае пусть это будут принтер и телефон), накладываем прозрачные объекты,
- применяем для них AS (при нажатии данные передаются в module.js, который в свою очередь “общается” с CL)
Для принтера (пусть это будет значение “1”):
on (release) {
import flash.external.ExternalInterface;
ExternalInterface.call("recieveFromFlash", 1);
}Для телефона (пусть будет 0)
on (release) {
import flash.external.ExternalInterface;
ExternalInterface.call("recieveFromFlash", 0);
}
3) CourseLab
- вставляем flash на слайд,
- вставляем на следующий слайд объект “Текущие результаты” из блока “Тесты”. Выбираем в настройках нашу цель – c1 и убираем галку “приводить к 100%”. Это нужно для того, чтобы проверить передается цель (потом мы этот слайд уберем),
- проверяем, работает ли передача данных – запускаем курс, нажимаем на принтер, идем на следующий слайд, если результат цели показывает “1”, то у нас все работает, для пущей уверенности, возвращаемся на слайд с flash и проделываем туже процедуру только для телефона,
- если все работает – удаляем этот тестовый слайд,
далее сделаем так, чтобы нам выдавалась обратная связь в зависимости от выбранного во flash предмета, для этого:
- создаем новый слайд и помещаем в него простой текстовый блок с текстом:
Вы выбрали: {{#a}}.
Таким образом мы заводим текстовую переменную, в которую будем записывать и выдавать обратную связь.
- на начало показа настраиваем действия (Условия изменения текста в зависимости от выбранной цели – в нашем случае предмета во Flash):
Все, можно проверять!
Курс (исходник) можно скачать здесь.
Upt: Flash рядом.
Комментарии
А этот метод мы действительно описали на клиентском сайте. Правда есть небольшое различие вы код прописываете в module.js, а мы предлагали после публикации править файл courselab.js.
Денис, спасибо вам за решение. Кстати на мой взгляд в module.js удобнее прописывать, т.к. этот файл как раз и предназначен для внешних скриптов.
ExternalInterface точно так же работает в AS3, отличаться будет только обработка нажатий (через листнеры).
Если я правильно понимаю (не пробовал, мы больше по Trivantis Lectora специалисты), можно и без скрипта-обертки вызывать SetObjectiveScore, но тогда любые правки требуют перекомпиляции флешки, а не правки JS ноутпадом. Т.е. вопрос удобства.