Я разрабатываю "игровую платформу" на ruby на рельсах. Это не 2D или 3D интенсивная игра, а скорее игра-викторина, представьте себе типичную викторину на Facebook или даже игры типа «насколько велик ваш мозг».
Студенты будут использовать эту платформу для разработки собственных идей. Суть в том, чтобы создать серию виджетов, которые они могут просто разместить на странице, и заставить их работать с данными и CSS.
Для этого я начал создавать виджеты, которые для интеграции в страницу вы просто делаете что-то вроде
<%= widget_name widget_params %>
Достаточно легко для них, но для этого мне нужно:
- Методы в помощниках, которые просто отображают частичные значения
- Частицы с html-элементами, помеченными id
- функции в файле javascript, которые ищут этот идентификатор на странице и, если найдены, выполняют свою работу (поскольку большинство виджетов так или иначе используют JS)
- Поддержка данных в модели.
Например, мой таймер - это функция javascript + партиал, в котором game.timeout является моделью игры с таймаутом для столбца для каждой игры. и все, что обернуто в помощнике, так что пользователь просто использует <%= timer @game %>
Обратите внимание, что виджеты должны изменить страницу или, по крайней мере, отправить какой-то сигнал контроллеру страницы, чтобы сообщить ему о глобальных изменениях. Например, виджет таймера не только завершает сам себя, но и должен сообщать игровому контроллеру, что игра также завершена (поэтому они являются частями на одной странице, а не в фреймах).
Интерфейс для использования студентами (всего один вкладыш) прост, и мне это нравится, но тот факт, что каждый виджет должен касаться очень многих мест, позволяет мне легко развертывать новые виджеты в каркасе и в целом выглядит ужасно дизайн.
Также я только что (1 час назад) обнаружил Extjs и, поскольку я буду разрабатывать GPL, я обдумываю это.
Есть ли какой-нибудь способ сделать extjs или любой другой виджет, созданный вручную или предоставленный более изолированным, но при этом иметь возможность изменять более глобальный контекст?